CodeVisionAVR
Z MediaWiki SPŠ a VOŠ Písek
(Rozdíly mezi verzemi)
Řádka 19: | Řádka 19: | ||
===Blikání LED=== | ===Blikání LED=== | ||
− | + | [[Soubor:PORTB.PNG|Brána PB0 jako výstupní]] | |
− | + | ||
− | [[Soubor:PORTB.PNG| | + | |
− | + | ||
− | + | ||
<source lang"C"> | <source lang"C"> | ||
Řádka 104: | Řádka 100: | ||
===Ovládání LCD=== | ===Ovládání LCD=== | ||
− | + | [[Soubor:LCD.PNG|thumb|nastavení podpory LCD]] | |
− | + | ||
− | [[Soubor:LCD.PNG| | + | |
− | |||
<source lang="C"> | <source lang="C"> | ||
/***************************************************** | /***************************************************** |
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; }; } }