Witam ni¿ej zamieszczem kod programu który przynajmniej teoretycznie mia³ uruchomiæ przetwornik AC w trybie single conversion mode niestety nie wygl±da to tak jak mia³o ;) a mia³o wygl±daæ tak: Stworzy³em sobie funkcje przerwania SIGNAL(SIG_ADC) ta funkcja powinna siê uruchamiaæ po ka¿dej konwersji, niestety nie uruchamia siê ani razu, jej uruchomienie spowodowa³o by zapalenie siê diody na czas 0,5s. Konwersje uruchamiaj± linijki kodu:
outp(0,ADMUX); outp((1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE),ADCSR); sei();
Przepisa³em je s³owo w s³owo z przyk³adu z dokumentacji AVR_GCC wed³ug mnie program ten powinien dzia³aæ ale jako¶ tego nie widzê ;). Ni¿ej zamieszczam kompletny program który nie dzia³a. Co wiêcej zauwa¿y³em ¿e po komêdzie sei(); program tak jakby nie powraca³ z przerwania bo je¶li po tej komêdzie chce mign±æ raz diod± czyli diode(1) to dioda zapala siê ale nie ga¶nie !!! tak¿e co¶ tu jest naburaczone ;( a funkcja mrugania jest na pewno dobra bo mruga³em ni± nie raz ;) tak¿e co¶ tu jest nie tak. Proszê o pomoc. Pozdrawiam
#define __AVR_ATmega8__ ; #include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
void diode(int im); void sleep(int ms);
SIGNAL(SIG_ADC) { diode(1); }
void sleep(int ms) { for (int l=0;l<ms;l++) { _delay_loop_2(4000); } }
void diode(int im) { sbi(DDRD,4);
for (;im!=0;im--) { cbi(PORTD,4); sleep(500); sbi(PORTD,4); }
cbi(DDRD,4); }
int main(void) {
outp(0,ADMUX); outp((1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE),ADCSR); sei();
// diode(1) je¶li tu wywo³am t± funkcje to dzia³a nieprawid³owo (dioda zapala siê ale nie ga¶nie a powinna zgasn±æ po 0,5s). Opisywany przypadek jednak zak³ada ¿e nie ma tu tej instrukcji wtedy dioda w ogóle siê nie zapala a powinna bo funkcja diode(1) wywo³ywana jest w funkcji przerwania.
while(1);
return(0); }