-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: IF - Schleife geht nicht richitg ?!?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.03.2004
    Ort
    Tauberbischofsheim
    Alter
    28
    Beiträge
    69

    IF - Schleife geht nicht richitg ?!?

    Anzeige

    hi,
    programmiere gerade mein erstes Programm in Bascom für einen sehr einfachen Roboter und da geht die IF Schleife nicht

    Code:
    'Roboter Projekt
    '-------------------------------------------------------------- ---------------
    $regfile = "m32def.dat"                                     'AT Mega 32
    $crystal = 8000000                                          'Quarz: 8 MHz
    
    '------------------ Pin setzten -----------------------------------------------
    Ddra = &B11111000                                           'Pin PA 3-7 auf Output setzen
    Porta = &B11111000                                          'Pin PA 3-7 auf High setzen
    
    Ddrb = &B00000001                                           'Pin PB 0 auf Output setzen
    Portb = &B00000001                                          'Pin PB 0 auf High setzen
    
    '------------------------------------------------------------------------------
    '------------------ MainLoop --------------------------------------------------
    '------------------------------------------------------------------------------
    Do
    
    '------------------ Motore einschalten ----------------------------------------
       Porta.3 = 1                                              'Motor Rechts einschalten
       Porta.6 = 1                                              'Motor Links einschalten
    
    '######################################################################################################################
      If Pina.0 = 0 Then                                        'Wenn bei PA0 Spannung anliegt
      'rückwärts fahren  
       Porta.4 = 0                                              'vorwärts Rechts
       Portb.0 = 0                                              'vorwärts Links
       Porta.5 = 1                                              'rückwärts Rechts
       Porta.7 = 1                                              'rückwärts Links
      End If
    '######################################################################################################################
      If Pina.0 = 1 And Pina.1 = 1 And Pina.2 = 1 Then          'Wenn keine Spannung bei PA0, PA1 und PA2 anliegt
      'vorwärts fahren
       Porta.4 = 1                                              'vorwärts Rechts
       Portb.0 = 1                                              'vorwärts Links
       Porta.5 = 0                                              'rückwärts Rechts
       Porta.7 = 0                                              'rückwärts Links
      End If
    '######################################################################################################################
    
    
    Loop
    End
    und zwar ist es so , das wenn bei
    If Pina.0 = 0 Then 'Wenn bei PA0 Spannung anliegt
    'rückwärts fahren
    Porta.4 = 0 'vorwärts Rechts
    Portb.0 = 0 'vorwärts Links
    Porta.5 = 1 'rückwärts Rechts
    Porta.7 = 1 'rückwärts Links
    End If
    Spannung anliegt , fährt er wie gewollt rückwärts ...
    aber wenn keine Spannung mehr anliegt fährt er immer noch rückwärts obwohl er vorwärts fahren sollte

    BITTE helft mir , bin ratlos !!!!!!!!!
    THX

    MFG,
    cyby \/

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    57
    Beiträge
    159
    hi,
    if pina.0 = 0 ' die bedingung ist erfüllt, wenn KEINE spannung anliegt
    sind evtl. alle anderen bedingungen (pina.1 und .2) erfüllt und das kerlchen führt ständig nur eine if-anweisung aus?
    kannste schön testen mit:
    if bedingung then ' bedingung erfüllt
    vorwärts...
    else ' bedingung nicht erfüllt
    rückwärts...
    end if
    gruss, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Was hast du denn für einen Sensor... angeschlossen, vielleicht solltest du auch einen pullup/down verwenden.

    MFG Moritz

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.03.2004
    Ort
    Tauberbischofsheim
    Alter
    28
    Beiträge
    69
    if pina.0 = 0 ' die bedingung ist erfüllt, wenn KEINE spannung anliegt
    sind evtl. alle anderen bedingungen (pina.1 und .2) erfüllt und das kerlchen führt ständig nur eine if-anweisung aus?
    nein , die anderen Bedingungen sind nicht erfüllt , da habe ich zum impuls-test einfach die Batterie dran gehängt ...

    if bedingung then ' bedingung erfüllt
    vorwärts...
    else ' bedingung nicht erfüllt
    rückwärts...
    end if
    ok , versuche ich mal

    Was hast du denn für einen Sensor... angeschlossen, vielleicht solltest du auch einen pullup/down verwenden.
    eine Batterie wie oben beschrieben , GND-Anschluss an die Batterie und VCC an den Chip

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    29.03.2004
    Ort
    Tauberbischofsheim
    Alter
    28
    Beiträge
    69
    Code:
    'Roboter Projekt
    '-------------------------------------------------------------- ---------------
    $regfile = "m32def.dat"                                     'AT Mega 32
    $crystal = 8000000                                          'Quarz: 8 MHz
    
    '------------------ Pin setzten -----------------------------------------------
    Ddra = &B11111000                                           'Pin PA 3-7 auf Output setzen
    Porta = &B11111000                                          'Pin PA 3-7 auf High setzen
    
    Ddrb = &B00000001                                           'Pin PB 0 auf Output setzen
    Portb = &B00000001                                          'Pin PB 0 auf High setzen
    
    '------------------------------------------------------------------------------
    '------------------ MainLoop --------------------------------------------------
    '------------------------------------------------------------------------------
    Do
    
    '------------------ Motore einschalten ----------------------------------------
       Porta.3 = 1                                              'Motor Rechts einschalten
       Porta.6 = 1                                              'Motor Links einschalten
    
    '######################################################################################################################
      If Pina.0 = 0 Then                                        'Wenn bei PA0 Spannung anliegt
      'rückwärts fahren
       Porta.4 = 0                                              'vorwärts Rechts
       Portb.0 = 0                                              'vorwärts Links
       Porta.5 = 1                                              'rückwärts Rechts
       Porta.7 = 1                                              'rückwärts Links
    '######################################################################################################################
      Else                                                      'Wenn keine Spannung bei PA0, PA1 und PA2 anliegt
      'vorwärts fahren
       Porta.4 = 1                                              'vorwärts Rechts
       Portb.0 = 1                                              'vorwärts Links
       Porta.5 = 0                                              'rückwärts Rechts
       Porta.7 = 0                                              'rückwärts Links
      End If
    '######################################################################################################################
    
    
    Loop
    End
    wie schon oben beschrieben , das selbe ergebnis das er nicht mehr vorwärts fahren will

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Hast du ihm auch gesagt, daß nix is mit Analog Conversion ?
    ich glaub, bei porta nimmt er defaultmäßig analog statt digital an.
    das wär schlecht in deinem Fall.
    ich müßt aber auch erst genau nachsehen.
    mfg robert

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    29.03.2004
    Ort
    Tauberbischofsheim
    Alter
    28
    Beiträge
    69
    keine ahnung , kenne mich noch nicht lange damit aus ...

  8. #8
    Gast
    Bin auch nicht sicher
    Aber wenn du das Register ADCSRA = 0 setzt, sollt so oder so Ruhe sein.
    mfg robert

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2004
    Ort
    durmersheim international
    Alter
    57
    Beiträge
    159
    hi,
    die nummer mit analog wird erst dann aktiv, wenn adc geconfigt wird.
    in deinem beispiel ist alles korrekt, normalerweise müsste eine pegeländerung an pina.0 IRGENDETWAS auslösen.
    wenn's hängt nehm ich immer irgend 'ne led und häng sie an einen pin, meistens hab ich aber 'n lcd dranne, da sieht man sofort an welcher stelle der AVR nicht so will wie ich. wie ich das sehe haste 2 motoren dranne, test halt einfach mal mit einem aus, also in die if-kiste einmal motor an und einmal aus.
    wie ist das mit der spannung an pina.0, liegt der pin zuverlässig auf gnd-niveau? notfalls pulldown-widerstand dranne, niemals einfach 'in der luft hängen lassen'. in so 'nem fall aktivierst du für gewöhnlich die internen pullup's (Porta.1 = 1), dann führt der pin spannung, wenn ein ext pegel (ic, transistor, schalter) ihn auf gnd 'zieht' -> andere bedingung.
    immer dran denken, der AVR 'reagiert' logisch, der menschliche verstand weniger, womit nur gesagt sein will, wenn der AVR nicht tut was du erwartest hat das seinen grund, die kunst ist, ihn zu finden.
    poste doch mal dein schaltbild, vllt. is da was nicht ok.
    grüssens und immer straight geradenaus, harry
    der kopf ist rund damit das denken seine richtung ändern kann...

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    29.03.2004
    Ort
    Tauberbischofsheim
    Alter
    28
    Beiträge
    69
    hab nun mal den code etwas gekürzt....

    'Roboter Projekt
    '-------------------------------------------------------------- ---------------
    $regfile = "m32def.dat" 'AT Mega 32
    $crystal = 8000000 'Quarz: 8 MHz
    '------------------ Pin setzten -----------------------------------------------
    Ddra = &B11111000 'Pin PA 3-7 auf Output setzen
    Do
    If Pina.0 = 0 Then 'Wenn bei PA0 Spannung anliegt
    Porta.4 = 0
    Elseif Pina.0 = 1 Then 'Wenn keine Spannung bei PA0 anliegt 'Pin PA 3-7 auf High setzen
    Porta.4 = 1
    End If
    Loop
    End


    nun mal das ganze wie gesagt mit einer LED ausprobiert, wie schon oben gesagt - normal leuchtet die LED , aber sobald einmal kurz Spannung an Pina.4 anliegt leuchtet sie nicht mehr

    wenn man "ADCSRA = 0" in den Code einbaut kommt irgentwie eine Fehlermeldung...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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