Vývojová deska ATMEL včetně AVR ATmega16 v2
(Rozdíly mezi verzemi)
(→www:) |
|||
Řádka 4: | Řádka 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:== | ||
Řádka 52: | Řádka 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. | ||
Řádka 64: | Řádka 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: == | ||
Řádka 78: | Řádka 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, 18:10
Univerzální modul je vhodný pro výuku programování mikroprocesorů ATMEL řady AVR řady.
Obsah |
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
www:
Prodej: Gotronik.pl Carpro.cz
Ukázkové programy:
Blikání LED
Počítadlo impulsů
Chyba při vytváření náhledu: Soubor patrně chybí: /var/www/wiki.sps-pi.cz/www/images/2/27/VYV50_pocitadlo_impulsů.jpg
/* * 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; } }