Habe ein Problem mit einem Datentransfer von Port C an Port D. Zur Info: Ich habe einen ATmega 16 und habe ihn mit WinAVR Programmiert. Wenn ich nun von Port C eine Zahl bekomme z.B. 15 oder so dann bekomme ich diesen nicht an Port D zurückgesand. Das JTAG habe ich abgeschaltet. Weiss langsam nicht mehr weiter. Für Hilfreiche Tipps Danke ich im vorraus!!! PS: Wenn in anderen Foren Tipps stehen dann her damit, habe schon gesucht aber nichts richtiges gefunden! Hier mein Quelltext: #include<avr/io.h> #include<inttypes.h> int main (void) { MCUCSR = (1<<JTD); MCUCSR = (1<<JTD); DDRA = 0x00; //port A input DDRB = 0xFF; // port B output DDRC = 0x00; // port C input //PORTC= 0x00; PINC=0x00; DDRD = 0xFF; int x = 0; unsigned char Bsend; int B,C,g,Pcdaten; TWCR = (0<<TWEN); ASSR = (0<<AS2); ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); ADMUX = 0; ADMUX = (1<<REFS1) | (1<<REFS0); // Select pin ADC0 using MUX // Activate ADC with Prescaler 128 -->16Mhz/128 = 125kHz //Start conversion ADCSRA |= (1<<ADSC); // wait until converstion completed while (ADCSRA & (1<<ADSC) ) for (;;) { ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ) // get converted value x = ADCW; x = x>>2; //Shiften um 2 Stellen nach rechts Bsend = x & 0b00001111; PORTB = Bsend; Bsend = x & 0b11110000; Bsend=Bsend>>4; Bsend = Bsend + 128; PORTB = Bsend; Pcdaten = PORTC; PORTD=PORTC; // Pcdaten = Pcdaten*10; // Pcdaten = 200; if (PIND &b00000010) //pind.2==1 { Pcdaten = Pcdaten + 10; } if (PIND &b00000100) //pind.3==1 { Pcdaten = Pcdaten - 10; } C = 500; B = C - Pcdaten; g = 0; // Anschalten der LED //PORTD &= ~(1<<PD5); PORTD =0b01111111; while (g < Pcdaten) { asm volatile("nop\n\t" ::); g = g + 1; } // Ausschalten der LED PORTD=0; //PORTD |= (1<<PD5); PORTD = 0b00000000; g = 0; while (g < B) { asm volatile("nop\n\t" ::); g = g + 1; } } ADCSRA &= ~(1<<ADEN); int i; i=0; for(i=0;i<255;i++) { asm volatile("nop\n\t" ::); PORTD=i; } }
Gast
#467980
PORTC => Ausgangsregister PINC => Eingangsregister Du hast das ein paarmal durcheinandergebracht, glaub' ich. Pcdaten = PORTC; PORTD=PORTC; Hier liest du das Ausgangsregister ein, sollte wohl eher PINC heißen, oder?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.