PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega16 Pin einlesen



JeyBee
31.03.2009, 19:42
Nabend,

Hallo Community,

Ich habe derzeit ein kleines Problem: Ich habe einen ATmega48 auf meinem Roboter, der zwei LDRs ausliest, und das ergebnis an dem ATmega16 weiter senden sollte, welcher dann die Motoren entsprächend ansteuert.
Zuerst wollte ich das ganze per UART lösen, da das jedoch nicht funktionierte, habe ich non zwei Pins den mega48er mit zwei anderen Pins der mega16er verbunden, jeweils per 1kOhm Widerstand.

Soweit so gut, nun habe ich die beiden Programme geschriben, der mega48 soll über zwei LEDs noch den Status der LDR anzeigen, wenn also auf die linke LDR licht fällt, leuchtet die grüne LED auf, bei der rechten LDR die rote LED.

Der Mega16 soll zwei Pins auslesen, und auch eine rote und grüne LED leuchten lassen, genau wie der mega48er. Jedoch soll er noch die Motoren ansteuern, die an einem L293D angeschlossen sind.

der Mega48 verrichtet seine Arbeit ganz gut, nur beim 16er hackt es noch ein bisschen, es liegt aber an dem Programm. Die Hardware habe ich mehrfach überprüft, und auch wenn ich Vcc (+5V) an den Pin lege, passiert nix.

Kann mir mal bitte Jemand das Programm überprüfen?


LDRsender (mega48): http://rafb.net/p/m3DJjS28.html
LDRempfänger (mega16): http://rafb.net/p/aVw4k213.html


Danke im Voraus!

McJenso
31.03.2009, 21:13
Hallo,



DDRB &=~ (1<<DDB4); //Zweite Leidung
DDRB |= (1<<DDB4); //Rote LED


Die Zeilen fallen mir gerade auf. Warum ist in dem Code für den 16er auch der ADC drin? Nun, vielleicht war es das ja schon.

Gruß

Jens

JeyBee
31.03.2009, 21:42
Hallo,

Erstmal vielen Dank, diesen Fehler habe ich nun behoben:


DDRB &=~ (1<<DDB3); //Erste Leitung
DDRB &=~ (1<<DDB4); //Zweite Leidung
DDRB |= (1<<DDD4); //Rote LED
DDRB |= (1<<DDD5); //Grüne LED


Jedoch funktioniert es noch immer nicht....
Auch dei Motoren drehen sich nicht.
Hier die Anschlussbelegung:



ATmega16:

LED Grün: PORTD.2
LED Rot: PORTD.3

1k anbindung an Mega48 (1): PORTB.3
1k anbindung an Mega48 (2): PORTB.4





ATmega48:

LED Grün: PORTB.5
LED Rot: PORTB.4

1k anbindung an Mega16 (1): PORTB.1
1k anbindung an Mega16 (2): PORTB.2


Mfg JeyBee

Dirk
31.03.2009, 22:08
Hallo JeyBee,

warum liest du beim Empfänger einen Analogwert über ADCs in eine 16-Bit-Variable ein? Gesendet wird doch nur eine Digitalwert (1/0).

Gruß Dirk

JeyBee
31.03.2009, 22:19
Hallo Dirk,

Falls du das beim mega16 meinst, da hängen noch 4 Sharp-IR Sensoren drann, die zur Zeit einfach noch nicht ausgelesen werden, um eventuelle Fehler im Programm zu minimieren.



Gruss JeyBee

McJenso
01.04.2009, 06:18
Hallo,



DDRB &=~ (1<<DDB3); //Erste Leitung
DDRB &=~ (1<<DDB4); //Zweite Leidung
DDRB |= (1<<DDD4); //Rote LED
DDRB |= (1<<DDD5); //Grüne LED

das sieht zwar etwas anders aus, ist aber immer noch das gleiche.
Wenn du PortD meinst , musst du auch DDRD schreiben.

Gruß

Jens