CodeVisionAVR: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Bez shrnutí editace |
Bez shrnutí editace |
||
(Není zobrazeno 18 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 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:// | [http://courses.cit.cornell.edu/ee476/codevisionC/cvavrman.pdf Manuál] | ||
[http://www.atmel.com/dyn/resources/prod_documents/doc2500.pdf Getting Started with the CodeVisionAVR C Compiler] | [http://www.atmel.com/dyn/resources/prod_documents/doc2500.pdf Getting Started with the CodeVisionAVR C Compiler] | ||
[http://www.hpinfotech.ro/html/cvavr.htm download] | [http://www.hpinfotech.ro/html/cvavr.htm download] | ||
==Úlohy pro začátky== | |||
===Blikání LED=== | |||
[[Soubor:PORTB.PNG|Brána PB0 jako výstupní]] | |||
<source lang"C"> | |||
/***************************************************** | |||
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); | |||
}; | |||
} | |||
</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=== | |||
[[Soubor:LCD.PNG|thumb|nastavení podpory LCD]] | |||
<source lang="C"> | |||
/***************************************************** | |||
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(); | |||
}; | |||
} | |||
</source> | |||
===Ovládání motoru=== | |||
<source lang="C"> | |||
#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; | |||
}; | |||
} | |||
} | |||
</source> |
Aktuální verze z 25. 11. 2012, 17:50
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;
};
}
}