CodeVisionAVR
Z MediaWiki SPŠ a VOŠ Písek
(Rozdíly mezi verzemi)
(→Blikání LED) |
|||
(Není zobrazeno 6 mezilehlých verzí od 2 uživatelů.) | |||
Řádka 1: | Řádka 1: | ||
− | === | + | == HW == |
+ | |||
+ | [[Soubor:AVR-PRG-01.jpg|100px]] [[Vývojová deska ATMEL včetně AVR ATmega16 v2]] | ||
+ | |||
+ | [[Soubor:AVR-TestBoard.JPG|100px]] [[AVR Testboard]] ze [[SOČ|SOČ 2010 a 2011]] | ||
+ | |||
+ | == www == | ||
http://www.hpinfotech.ro/html/cvavr.htm | http://www.hpinfotech.ro/html/cvavr.htm | ||
Řádka 12: | Řádka 18: | ||
===Blikání LED=== | ===Blikání LED=== | ||
− | + | ||
− | + | [[Soubor:PORTB.PNG|Brána PB0 jako výstupní]] | |
− | [[Soubor:PORTB.PNG]] | + | |
− | + | ||
<source lang"C"> | <source lang"C"> | ||
/***************************************************** | /***************************************************** | ||
Chip : ATmega8 | Chip : ATmega8 | ||
Project : Blikání s LED | Project : Blikání s LED | ||
− | + | Author : Zeman | |
− | + | ||
− | Author | + | |
− | + | ||
− | + | ||
*****************************************************/ | *****************************************************/ | ||
− | #include <mega8.h> | + | #include <mega8.h> |
+ | |||
// Knihovnu delay musíme sami nadefinovat tímto příkazem | // Knihovnu delay musíme sami nadefinovat tímto příkazem | ||
#include <delay.h> | #include <delay.h> | ||
Řádka 55: | Řádka 57: | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | === Ovládání sedmisegmentovky === | ||
+ | |||
+ | <source lang"C"> | ||
+ | /***************************************************** | ||
+ | Chip : ATmega32 | ||
+ | Project : Ovládání segmisegmentovky | ||
+ | Author : JA podle CSI | ||
+ | *****************************************************/ | ||
+ | |||
+ | #include <mega32.h> | ||
+ | #include <delay.h> | ||
+ | |||
+ | // Začátek hlavního programu | ||
+ | void main(void) | ||
+ | { | ||
+ | |||
+ | // Nadefinování portu PB0 jako výstupní | ||
+ | PORTB=0x00; | ||
+ | DDRB=0x01; | ||
+ | |||
+ | // Nekonečná smyčka while stále opakuje níže napsaný program | ||
+ | while (1) | ||
+ | { | ||
+ | |||
+ | // Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01) | ||
+ | PORTB = 0b00000001; | ||
+ | // Vyčká půl sekundy | ||
+ | delay_ms(500); | ||
+ | // Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00) | ||
+ | PORTB = 0b00000000; | ||
+ | // Vyčká půl sekundy | ||
+ | delay_ms(500); | ||
+ | |||
+ | }; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
===Ovládání LCD=== | ===Ovládání LCD=== | ||
− | |||
− | |||
− | [[Soubor:LCD.PNG]] | + | [[Soubor:LCD.PNG|thumb|nastavení podpory LCD]] |
− | |||
<source lang="C"> | <source lang="C"> | ||
/***************************************************** | /***************************************************** | ||
Project : Vypisování textu na LCD | Project : Vypisování textu na LCD | ||
− | |||
− | |||
Author : Matěj | Author : Matěj | ||
− | |||
− | |||
*****************************************************/ | *****************************************************/ | ||
Řádka 103: | Řádka 138: | ||
} | } | ||
</source> | </source> | ||
+ | |||
===Ovládání motoru=== | ===Ovládání motoru=== | ||
Řádka 108: | Řádka 144: | ||
<source lang="C"> | <source lang="C"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
#include <mega16.h> | #include <mega16.h> | ||
Řádka 140: | Řádka 168: | ||
{ | { | ||
− | |||
// Port A initialization | // Port A initialization | ||
PORTA=0x00; | PORTA=0x00; | ||
DDRA=0x00; | DDRA=0x00; | ||
− | |||
− | |||
− | |||
− | |||
// Port C initialization | // Port C initialization | ||
PORTC=0x00; | PORTC=0x00; | ||
− | DDRC= | + | DDRC=0b00000011; |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
delay_ms(200); | delay_ms(200); | ||
PORTC=0b00000001; | PORTC=0b00000001; | ||
Řádka 245: | Řádka 181: | ||
PORTC=0b00000010; | PORTC=0b00000010; | ||
delay_ms(2000); | delay_ms(2000); | ||
+ | |||
hrana=(read_adc(0)+read_adc(1))/2; | hrana=(read_adc(0)+read_adc(1))/2; | ||
PORTC=0b00000000; | PORTC=0b00000000; |
Aktuální verze z 25. 11. 2012, 19:50
Obsah |
HW
Vývojová deska ATMEL včetně AVR ATmega16 v2
AVR Testboard ze SOČ 2010 a 2011
www
http://www.hpinfotech.ro/html/cvavr.htm
Getting Started with the CodeVisionAVR C Compiler
Úlohy pro začátky
Blikání LED
/***************************************************** Chip : ATmega8 Project : Blikání s LED Author : Zeman *****************************************************/ #include <mega8.h> // Knihovnu delay musíme sami nadefinovat tímto příkazem #include <delay.h> // Začátek hlavního programu void main(void) { // Nadefinování portu PB0 jako výstupní PORTB=0x00; DDRB=0x01; // Nekonečná smyčka while stále opakuje níže napsaný program while (1) { // Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01) PORTB = 0b00000001; // Vyčká půl sekundy delay_ms(500); // Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00) PORTB = 0b00000000; // Vyčká půl sekundy delay_ms(500); }; }
Ovládání sedmisegmentovky
/***************************************************** Chip : ATmega32 Project : Ovládání segmisegmentovky Author : JA podle CSI *****************************************************/ #include <mega32.h> #include <delay.h> // Začátek hlavního programu void main(void) { // Nadefinování portu PB0 jako výstupní PORTB=0x00; DDRB=0x01; // Nekonečná smyčka while stále opakuje níže napsaný program while (1) { // Na port PB0 se vyšle log. 1 (lze také zapsat v HEX --> 0x01) PORTB = 0b00000001; // Vyčká půl sekundy delay_ms(500); // Na port PB0 se vyšle log. 0 (lze také zapsat v HEX --> 0x00) PORTB = 0b00000000; // Vyčká půl sekundy delay_ms(500); }; }
Ovládání LCD
/***************************************************** Project : Vypisování textu na LCD Author : Matěj *****************************************************/ #include <mega8.h> // knihovnu delay musíme nadefinovat sami, tak, že napíšeme tento kód #include <delay.h> // Tímto příkazem se automaticky nadefinuje LCD pro použití v programu #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> // Začátek hlavního programu void main(void) { // Inicializace LCD displaye lcd_init(16); { // Tímto příkazem nastavíme počáteční polohu textu na displayi (x= 0-16, y= 0-1) lcd_gotoxy (0,0); // Tímto příkazem vyšleme na LCD text lcd_putsf ("Ahoj"); // delay nám určuje, po jaké době bude smazán text na displayi delay_ms(1000); // tímto příkazem smažeme všechen text z LCD lcd_clear(); }; }
Ovládání motoru
#include <mega16.h> #include <stdio.h> #include <stdlib.h> #define F_CPU 18423000 #include <delay.h> #define ADC_VREF_TYPE 0x60 int hrana; bit por0; //Deklarace globálních proměnných unsigned int read_adc(unsigned char kanal) { ADMUX=kanal; ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|= 0x10; return ADCW; } void main(void) { // Port A initialization PORTA=0x00; DDRA=0x00; // Port C initialization PORTC=0x00; DDRC=0b00000011; delay_ms(200); PORTC=0b00000001; delay_ms(200); PORTC=0b00000010; delay_ms(2000); hrana=(read_adc(0)+read_adc(1))/2; PORTC=0b00000000; while(1){ if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){ PORTD=0b00100111; }; if ((read_adc(0)>hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){ PORTD=0b01101011; }; if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)<hrana)*(read_adc(3)>hrana)){ PORTD=0b01101011; }; if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){ PORTD=0b01011011; } if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b00100111;}; if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b00100111; }; if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)> hrana)){ if (por0){ PORTD=0b01011011; delay_ms(100); PORTD=0b01101011; delay_ms(2000); por0=0;}else{ PORTD=0b00100111; delay_ms(200); por0=1; }; }; if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b01100011; }; if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)<hrana)*(read_adc(3)<hrana)){ PORTD=0b01010001; }; if ((read_adc(0)<hrana)*(read_adc(1)<hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){ PORTD=0b00100110; }; if ((read_adc(0)<hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)>hrana)){ PORTD=0b00100110; }; if ((read_adc(0)>hrana)*(read_adc(1)>hrana)*(read_adc(2)>hrana)*(read_adc(3)<hrana)){ PORTD=0b00100101; }; } }