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; } }
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?
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.