Stránka 2 z 2
Napsal: 11 říj 2010, 16:42
od WLAB
Andrea píše:Tak třeba ATmega48/88/168 a vůbec novější ATmegy umí spouštět od T/C0, T/C1, Int0 a analogového komparátoru.
To je uz rozumne, ale neni to pripad te ATmegy8....
Jeste by mohli zavest alespon 2 urovnovy prerusovaci system a spousta aplikaci by se na tom psala lepe.
Napsal: 19 říj 2010, 17:34
od _serafin_
Ahoj všem, konečně si mi snad podařilo sepsat zdrojový kód (za pomoci různých článků, datasheetu a různých jiných kódů). Moc Vás prosím o kontrolu.
#include <avr/io.h>
#include <inttypes.h>
void InitADC()
{
//reference je napájecí napětí, zarovnání doprava (rozlišení bude 8bit)
ADMUX|= (1<<REFS0)|(1<<ADLAR);
//zapne adc, dělící poměr je 64
ADCSRA|= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
}
uint8_t ReadADC()
{
// spustí první konverzi a pokračuje ve free running modu
ADCSRA|= (1<<ADSC)|(1<<ADFR);
return (ADCH);
}
void InitUSART(uint16_t ubrr_value)
{
//nastaví přenosovou rychlost na 9600baud
UBRRL= ubrr_value;
UBRRH= (ubrr_value >>8 );
//nastaví formát rámce, asynchronní mode, bez parity, 1 stopbit, délak slova 8bit
UCSRC= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
// povolí vysílač
UCSRB= (1<<TXEN);
}
void USARTWriteChar(char data)
{
// počká, dokud vysálač není připraven
while(!(UCSRA & (1<<UDRE)))
{
//nedělá nic
}
// vynuluje bit TxC
UCSRA|= (1<<TXC);
// zapíše data do buffru USARTu
UDR= data;
}
void main()
{
char data;
// inicializace USART
InitUSART(51);
// inicializace ADC
InitADC();
// přečte data z ADC
data= ReadADC(0);
// odešle data z ADC skrz TxD
USARTWriteChar(data);
while(1);
}
}
}
Procesor by měl fungovat tak, že hned po připojení napájení se spustí ADC a odesílání přes USART (i kdyby nakonec na monitoru měla být jen rovná čára). Převod i komunikace bude fungovat dokud bude připojeno napájení.
Děkuji všem

.
Napsal: 19 říj 2010, 18:23
od WLAB
A zkousel jsi to prelozit
At glance:
- na konci je nejak moc zavorek
- program provede cosi s daty a pak skonci ve while(1); bud to dej cele do while cyklu, nebo pred ten while dej "do" a operace s adc a uartem dej mezi to do bloku.
- u ADC se mi zda ze necekas na validni vysledek prevodu
- ADC ve freerunu startuj jinde,nez v te cteci procedure.
- kdyz funkce nema zadny parametr nemuze tam nic predavat, ani tu nulu
- u tech deklaraci ti chybu v parametrech void
.
.
.
.
Napsal: 19 říj 2010, 18:36
od _serafin_
to WLAB: Přeložit jsem to ještě nezkoušel. Nějak nemůžu rozchodit AVR studio. Ať zkouším přeložit cokoliv (i úplně primitivní program), tak mi to zkončí chybou:
make: Makefile: No such file or directory
make: *** No rule to make target `Makefile'. Stop.
Instaloval jsem to podle tohoto návodu
http://forum.mcontrollers.com/viewtopic.php?p=5779#5779 a stejně mi to končí chybou.
Závorka sem, závorka tam

, už jsem to opravil tak to snad sedí.
S tím "do" jsi to myslel takhle:
#include <avr/io.h>
.
.
.
void main()
{
char data;
do{
// inicializace USART
InitUSART(51);
// inicializace ADC
InitADC();
// přečte data z ADC
data= ReadADC(0);
// odešle data z ADC skrz TxD
USARTWriteChar(data);
}
while(1);
}
a nebo takhle:
#include <avr/io.h>
.
.
.
void main()
{
char data;
// inicializace USART
InitUSART(51);
// inicializace ADC
InitADC();
do{
// přečte data z ADC
data= ReadADC(0);
// odešle data z ADC skrz TxD
USARTWriteChar(data);
}
while(1);
}
