Vývojová deska ATMEL včetně AVR ATmega16 v2: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
|||
Řádek 4: | Řádek 4: | ||
[[Soubor:VYV-deska-AVR-ATmega16-09.jpg|right|400px]] | [[Soubor:VYV-deska-AVR-ATmega16-09.jpg|right|400px]] | ||
[[Soubor:mobilni-robot-05.jpg|right]] | |||
==Na desce modulu je:== | ==Na desce modulu je:== | ||
Řádek 52: | Řádek 54: | ||
== Postup: == | |||
Postup: | |||
* Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB. | * Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB. | ||
Řádek 64: | Řádek 62: | ||
* K naprogramování mikroprocesoru, stiskněte tlačítko RESET | * K naprogramování mikroprocesoru, stiskněte tlačítko RESET | ||
<gallery> | |||
Soubor:VYV50_ATmega-01.jpg|MegaLoad | |||
Soubor:VYV50_ATmega-02.jpg|WIN správce zařízení | |||
</gallery> | |||
== www: == | == www: == | ||
Řádek 78: | Řádek 76: | ||
[[Soubor:html.jpg]] [http://www.microsyl.com/index.php/2010/03/30/megaload/ SW:MegaLoad] | [[Soubor:html.jpg]] [http://www.microsyl.com/index.php/2010/03/30/megaload/ SW:MegaLoad] | ||
== Ukázkové programy:== | |||
=== Blikání LED === | |||
[[Soubor:VYV50_blik.jpg|right|300px]] | |||
<source lang"C"> | |||
</source> | |||
=== Počítadlo impulsů === | |||
[[Soubor:VYV50_pocitadlo_impulsů.jpg|right|300px]] [[Soubor:FTP.jpg]][ftp://obelix.sps-pi.cz/N/janousek/mikroLAB/87_VYV%20Vyvojove%20sestavy/VYV50%20AVR%20ATmega32/02_Po%E8itadlo%20by%20Jan%20Nov/D4_14_Novotny_pocitadlo_impulzu_ATmega32.hex Download hex] | |||
<source lang"C"> | |||
/* | |||
* impulzy.c | |||
* | |||
* Created: 13.4.2012 10:28:29 | |||
* Author: Novotný Jan D4 2012 | |||
* Brána A bity 3 -0 řídí Anody | |||
* Brána C řídí jednotlivé segmenty v pořadí: -GFEDCBA na bitech 7 až 0 (7. bit neobsazen) | |||
* Vstup počítadla 0.bit na PORTB | |||
* Reset 2. bit na bráně PORTD | |||
*/ | |||
#define F_CPU 16000000 | |||
#define SETBIT(BRANA, BIT) ((BRANA) |= (1<<(BIT))) | |||
#define CLRBIT(BRANA, BIT) ((BRANA) &= ~(1<<(BIT))) | |||
#define NEGBIT(BRANA, BIT) ((BRANA) ^= (1<<(BIT))) | |||
#define TESTBIT(BRANA, BIT) ((BRANA) & (1<<(BIT))) | |||
#include <avr/io.h> | |||
#include <avr/interrupt.h> | |||
#include <stdint.h> | |||
#include <stdlib.h> | |||
void napiscislo(uint8_t numero); | |||
volatile uint32_t pocet=0; | |||
volatile uint8_t digits[4]={0,0,0,0}; | |||
void LED_Print(uint32_t num); | |||
int main(void) | |||
{ | |||
DDRC=0xff; | |||
DDRA=0xff; | |||
PORTC=0xff; | |||
PORTA=0xff; | |||
SETBIT(PORTB,PB0); | |||
SETBIT(PORTD,PD2); | |||
MCUCR|=(1<<ISC01); | |||
GICR|=(1<<INT0); | |||
TCCR1B|=(1<<WGM12)|(1<<CS11); | |||
TCCR0|=(1<<CS01); | |||
TIMSK|=(1<<TOIE0)|(1<<OCIE1A); | |||
OCR1A=19999; | |||
sei(); | |||
while(1) | |||
{ | |||
} | |||
} | |||
void napiscislo(uint8_t numero) | |||
{ | |||
if (numero==1) | |||
PORTC=0b11111001; | |||
else if (numero==2) | |||
PORTC=0b10100100; | |||
else if (numero == 3) | |||
PORTC=0b10110000; | |||
else if (numero==4) | |||
PORTC=0b10011001; | |||
else if (numero==5) | |||
PORTC=0b10010010; | |||
else if (numero==6) | |||
PORTC=0b00000010; | |||
else if (numero==7) | |||
PORTC=0b11111000; | |||
else if (numero==8) | |||
PORTC=0b10000000; | |||
else if (numero==9) | |||
PORTC=0b10010000; | |||
else if (numero==0) | |||
PORTC=0b11000000; | |||
} | |||
void LED_Print(uint32_t num) | |||
{ | |||
cli(); | |||
uint8_t i=0,j; | |||
while(num) | |||
{ | |||
digits[i]=num%10; | |||
i++; | |||
num=num/10; | |||
} | |||
for(j=i;j<4;j++) | |||
digits[j]=0; | |||
sei(); | |||
} | |||
ISR(INT1_vect) | |||
{ | |||
pocet=0; | |||
} | |||
ISR(TIMER1_COMPA_vect) | |||
{ | |||
static char port=0; | |||
port*=2; | |||
if (!TESTBIT(PINB,PB0)) | |||
port+=1; | |||
if(port==0x07) | |||
pocet++; | |||
LED_Print(pocet); | |||
/* | |||
if (pocet==10) | |||
pocet=0;*/ | |||
} | |||
ISR(TIMER0_OVF_vect) | |||
{ | |||
static uint8_t display=0; | |||
PORTC=0xff; | |||
PORTA=0x00; | |||
switch (display) | |||
{ | |||
case 4: | |||
display=1; | |||
PORTA=0b1110; | |||
napiscislo(digits[0]); | |||
break; | |||
case 1: | |||
display=2; | |||
PORTA=0b1101; | |||
napiscislo(digits[1]); | |||
break; | |||
case 2: | |||
display=3; | |||
napiscislo(digits[2]); | |||
PORTA=0b1011; | |||
break; | |||
case 3: | |||
display=4; | |||
PORTA=0b0111; | |||
napiscislo(digits[3]); | |||
break; | |||
default: | |||
display=4; | |||
} | |||
} | |||
</source> |
Verze z 26. 11. 2012, 16:10
Univerzální modul je vhodný pro výuku programování mikroprocesorů ATMEL řady AVR řady.
Na desce modulu je:
- Mikrokontrolér: AVR ATMEGA16 16PU
- Quartz rezonátor: 16MHz
- Tlačítko RESET
- Konektor pro programování ISP
- Potenciometr pro napětí Vref
- Vyvedení všech portů mikroprocesoru
- HD44780 2x16 LCD s podsvícením
- LCD displej na konektoru - možnost výměny
- Nastavení kontrastu displeje LCD
- MMC / SD karta s vyhazovačem
- Multiplexní 7-segment LED 4ks
- LED 8 ks
- 8ks tlačítka mikrospínače klávesnice.
- Čtyři potenciometry pro nastavení napětí kapaliny 0-5V
- Výkonové tranzistory s otevřeným kolektorem (8 výstupů) ULN2803
- Reproduktor - bzučák
- Digitální teploměr DS1820 1-wire
- TSOP4836 infračervený přijímač
- Hodiny reálného času PCF8583
- I2C sběrnice s restorami 4K7
- Sériové paměti EEPROM 24C16
- Převodník RS485 - SN75176
- Baterie - baterie CR232
- USB - možnost napájení modulu
- USB-RS232 - postaven na systému FR232RL
- Napájecí zdroj (usměrňovač most, filtr kapacitní, stabilizátor 7805
- 132 podložky pro vlastní potřebu - univerzální deska:
Fotografie:
Postup:
- Bootloader - je program kterým je ATmega naprogramovaný z výroby. Tento firmware umožňuje nahrát vyvíjenou aplikace do paměti Flash pomocí seriové linky USB.
- Konfigurace musí být nastavena propojkami u FT232 Txd<-->PD0 a Rxd<---> PD1
- Nainstalujte si program MegaLoad
- Po spuštění vyberte soubor formátu *.hex, kterým chcete naprogramovat MCU, vyberte příslušný port (např. Port11) a nastavte přenosovou rychlost 57 600bps. Pozn. Správný port najdete ve WIN ve správci zařízení v řádku Porty (COM a LPT)
- K naprogramování mikroprocesoru, stiskněte tlačítko RESET
-
MegaLoad
-
WIN správce zařízení
www:
Prodej: Gotronik.pl Carpro.cz
Ukázkové programy:
Blikání LED
Počítadlo impulsů
/*
* impulzy.c
*
* Created: 13.4.2012 10:28:29
* Author: Novotný Jan D4 2012
* Brána A bity 3 -0 řídí Anody
* Brána C řídí jednotlivé segmenty v pořadí: -GFEDCBA na bitech 7 až 0 (7. bit neobsazen)
* Vstup počítadla 0.bit na PORTB
* Reset 2. bit na bráně PORTD
*/
#define F_CPU 16000000
#define SETBIT(BRANA, BIT) ((BRANA) |= (1<<(BIT)))
#define CLRBIT(BRANA, BIT) ((BRANA) &= ~(1<<(BIT)))
#define NEGBIT(BRANA, BIT) ((BRANA) ^= (1<<(BIT)))
#define TESTBIT(BRANA, BIT) ((BRANA) & (1<<(BIT)))
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdlib.h>
void napiscislo(uint8_t numero);
volatile uint32_t pocet=0;
volatile uint8_t digits[4]={0,0,0,0};
void LED_Print(uint32_t num);
int main(void)
{
DDRC=0xff;
DDRA=0xff;
PORTC=0xff;
PORTA=0xff;
SETBIT(PORTB,PB0);
SETBIT(PORTD,PD2);
MCUCR|=(1<<ISC01);
GICR|=(1<<INT0);
TCCR1B|=(1<<WGM12)|(1<<CS11);
TCCR0|=(1<<CS01);
TIMSK|=(1<<TOIE0)|(1<<OCIE1A);
OCR1A=19999;
sei();
while(1)
{
}
}
void napiscislo(uint8_t numero)
{
if (numero==1)
PORTC=0b11111001;
else if (numero==2)
PORTC=0b10100100;
else if (numero == 3)
PORTC=0b10110000;
else if (numero==4)
PORTC=0b10011001;
else if (numero==5)
PORTC=0b10010010;
else if (numero==6)
PORTC=0b00000010;
else if (numero==7)
PORTC=0b11111000;
else if (numero==8)
PORTC=0b10000000;
else if (numero==9)
PORTC=0b10010000;
else if (numero==0)
PORTC=0b11000000;
}
void LED_Print(uint32_t num)
{
cli();
uint8_t i=0,j;
while(num)
{
digits[i]=num%10;
i++;
num=num/10;
}
for(j=i;j<4;j++)
digits[j]=0;
sei();
}
ISR(INT1_vect)
{
pocet=0;
}
ISR(TIMER1_COMPA_vect)
{
static char port=0;
port*=2;
if (!TESTBIT(PINB,PB0))
port+=1;
if(port==0x07)
pocet++;
LED_Print(pocet);
/*
if (pocet==10)
pocet=0;*/
}
ISR(TIMER0_OVF_vect)
{
static uint8_t display=0;
PORTC=0xff;
PORTA=0x00;
switch (display)
{
case 4:
display=1;
PORTA=0b1110;
napiscislo(digits[0]);
break;
case 1:
display=2;
PORTA=0b1101;
napiscislo(digits[1]);
break;
case 2:
display=3;
napiscislo(digits[2]);
PORTA=0b1011;
break;
case 3:
display=4;
PORTA=0b0111;
napiscislo(digits[3]);
break;
default:
display=4;
}
}