-         

Ergebnis 1 bis 6 von 6

Thema: ATmega16 Pin einlesen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277

    ATmega16 Pin einlesen

    Anzeige

    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 (mega4: http://rafb.net/p/m3DJjS28.html
    LDRempfänger (mega16): http://rafb.net/p/aVw4k213.html


    Danke im Voraus!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    Code:
       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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    Hallo,

    Erstmal vielen Dank, diesen Fehler habe ich nun behoben:
    Code:
       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:

    Code:
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    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

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    Code:
       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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •