Hallo ich habe gerade ein AD Wandler besorgt und wollte überprüfen ob es funktioniert.hab ihn mit ein atmega16 angeschlossen und wollte über LEDS das Ergebniss von der convertierung sehen.das problem dass alle LEDS an PORTD immer an sind trotz dass ich die Spannung an IN0 ändere. wäre nett wenn jemand mir hilfen kann Danke im Voraus hier bei mein source code: #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #include <avr/delay.h> #include <inttypes.h> #define C PA6 #define B PA5 #define A PA4 #define EOC PA3 #define data PORTC #define TRUE 1 #define FALSE 0 volatile int8_t state=0; unsigned short adc(unsigned char admux); unsigned char ADC0809(unsigned char channel); void TIMER1_interrupt_init(void); void init_ports(); int main() { unsigned char d; init_ports(); IMER1_interrupt_init(); sei(); while( 1 ) { d=ADC0809(0); PORTD=d; } } void init_ports() { DDRD=0xFF; //PORTD als Ausgang PORTD =0x00; DDRC=0x00; //PORTC als EINGANG PORTC =0xFF; DDRB=0xFF; //PORTB als Ausgang PORTB =0x00; DDRA=0xF0; PORTA =0x08; } unsigned char ADC0809(unsigned char channel) { unsigned char adwert; if ( channel == 0 ) { PORTA &= ~ ( 1 << A) | ( 1 << B) | ( 1 << C) ; } if ( channel == 1 ) { PORTA &= ~ ( 1 << B) | ( 1 << C) ; PORTA |= ( 1 << A); } if ( channel == 2 ) { PORTA &= ~ ( 1 << A) | ( 1 << C) ; PORTA |= ( 1 << B) ; } if ( channel == 3 ) { PORTA &= ~ ( 1 << C) ; PORTA |= ( 1 << A) | ( 1 << B) ; } PORTD |= ( 1 << START ); PORTD &= ~( 1 << START ); while(EOC==0); //check for EOC to go high PORTD |= ( 1 << OE );//enable output data adwert=data; //read data PORTD &= ~ ( 1 << OE ); //disable adc return adwert; //return data } //ISR Für den ADC0809 CLOCK ISR(TIMER1_COMPA_vect){ PORTB=state; if ( state ==0 ) state=1; else state=0; } void TIMER1_interrupt_init(void) { TCNT1=0; //Anfangszählerstand = 0 OCR1A=5; //Zähler zählt bis 5: 125000/5 = 200000 200kHz TCCR1B=0x02; //CTC-Modus: Takt intern von 8 Mhz /8 = 1000000Hz TIMSK|=(1<<OCIE1A);//Timer/Counter1 Compare A Match Interrupt aktivieren: }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.