- Labornetzteil AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Anweisung wird nicht richtig ausgeführt

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519

    Anweisung wird nicht richtig ausgeführt

    Anzeige

    E-Bike
    Hallo

    Ich habe folgendes Problem. Und zwar soll mein ATmega32 am Eingang PC2 ein High-Signal empfangen und wenn dies der Fall ist den Ausgang PD2 auf High setzen.

    In der Praxis sieht dies jedoch so aus, dass PD2 immer auf High ist. Egal ob nun am Eingang PC2 ein High- oder Low-Signal anliegt. Woran kann das liegen. Ich habe das ganze mit dem alten Code meines einstigen Mega8 Boards abgeglichen. Er sollte gleich sein. Nur bei meinem Mega8 funktionierte die ganze Geschichte.

    Code:
    $regfile = "m32def.dat"                                     'ATmega32
    $crystal = 11059200                                         'Quarz: 11059200 Hz
    
    Ddrc = &B00000000                                           
    Ddrd = &B00111100                                           
    
    Do
    
       If Pinc.2 = 1 Then                                       'SHARP
    
         Portd.2 = 1
          Waitms3000
       End If
    
    Loop
    End

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    der Port wird auch nie mehr zurückgesetzt !
    Es muss irgendwo ein else stehen, in dem der PortD.2 auf 0 gesetzt wird,
    denn so wie jetzt wenn C2 einmal auf eins war bleibt D2 auch immer auf 1 stehen.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    Das heist das ich den Code folgendermaßen umschreiben müsste?

    Code:
       If Pinc.2 = 1 Then                                       'SHARP
    
         Portd.2 = 1
          Waitms3000
         
         Else
        Portd.2=0
       End If

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Ja, schaut besser aus,
    schon probiert ?

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    Habs eben ausprobiert und nun geht es wunderbar
    Vielen, vielen Dank!

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    Naja allerdings auch nur bedingt...
    Wenn ich mehrere If-Schleifen habe spinnt das Programm völlig weil es wohl anscheinend alle Else-Schleifen auf einmal abarbeitet und dann total ins Wanken kommt. Was ich auch nicht verstehe ist wieso dieser Code hier meines alter Boards einwandfrei funktioniert

    Code:
    $regfile = "m8def.dat"                                      'ATmega8
    $crystal = 3686411                                          'Quarz: 3686411 Hz
    
    
    Ddrb = &B00000000
    Ddrc = &B00000000
    Ddrd = &B11110000                                           
    
    Do
      Portd.4 = 1                                               
      Portd.5 = 0
      Portd.6 = 1
      Portd.7 = 0
    
    
    
       If Pinc.1 = 1 Then                                       'SHARP rechts
    
         Portd.4 = 1
         Portd.7 = 1
    
         Portd.6 = 0
         Portd.5 = 0
         Waitms 500
       End If
    
       If Pinc.2 = 1 Then                                       'SHARP links
    
         Portd.5 = 1
         Portd.6 = 1
    
         Portd.4 = 0
         Portd.7 = 0
         Waitms 500
       End If
    
    Loop
    End
    
    'Auf PD4-7 sind jeweils meine Motoren
    und mein neuer hier unten ohne die else-schleife nicht arbeiten will

    Code:
    $regfile = "m32def.dat"                                     'ATmega32
    $crystal = 11059200                                         'Quarz: 11059200 Hz
    
    Ddrc = &B00000000                                           
    Ddrd = &B00111100                                          
    
    Do
    
    Portd.2 = 1                                               
    Portd.3 = 0                                               
    Portd.4 = 1                                                
    Portd.5 = 0
    
       If Pinc.2 = 1 Then                                       'SHARP R
    
         Portd.2 = 0
         Portd.3 = 0
         Portd.4 = 1
         Portd.5 = 0
         Waitms 3000
    
    '   Else
    '     Portd.2 = 1
    '     Portd.3 = 0
    '     Portd.4 = 1
    '     Portd.5 = 0
       End If
    
       If Pinc.3 = 1 Then                                       'SHARP L
    
         Portd.2 = 1
         Portd.3 = 0
         Portd.4 = 0
         Portd.5 = 0
         Waitms 500
    
    '   Else
    '     Portd.2 = 1
    '     Portd.3 = 0
    '     Portd.4 = 1
    '     Portd.5 = 0
       End If
    
    Loop
    End
    Ohne die Else-Schaltung schaltet es wie bereits angesprochen meine Ports dauernd auf High, egal ob nun PC2 oder PC3 auf High ist oder nicht. Wenn ich ein Else einfüge passiert das nicht. Das wäre soweit gut soweit es nur eine If-Schleife gibt aber sobald es wie oben zu sehen 2 If-Schleifen gibt mit jeweils einer Else-Anweisung spinnt mein AVR total weil er anscheinend die Else nun ausführen will und total durcheinander kommt. Aber wieso sind die Else oben NICHT notwendig und unten sind sie es??

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Hast Du die Taster/Schalter mit Pullups an den Port C angeschlossen?

    Ansonsten mal die internen Pullups aktivieren mit Portc=&B11111111

    Nicht, dass die Eingangs-PIN´s in der Luft hängen...

    Viele Grüße

    Torsten

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.03.2005
    Ort
    Ulm
    Alter
    37
    Beiträge
    519
    Hallo

    Habe ich vergessen zu erwähnen. Ich nutze keine Taster/Schalter sondern SHARP GP12D IR-Sensoren, die über einen OP-Amp gesteuert werden. Der OP-Amp schickt dann je nachdem ein Low- oder High-Signal an den AVR.

Berechtigungen

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

12V Akku bauen