- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Kleiner Fehler im Prog, aber wo?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163

    Kleiner Fehler im Prog, aber wo?

    Hallo Leute,

    kann mir jemand sagen was an dier Schreibweise nich richtig ist?
    PortC ist bei mir als Output und PortAC als Input konfiguriert.

    Code:
    Do
    
       If Porta = &B00000000 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
       If Porta = &B00000001 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
       End If
    
    
       If Porta = &B00000010 Then
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    
       If Porta = &B00000011 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    Loop
    Ich vermute, dass hiermit "Porta = &B00000011" etwas nicht stimmt.

    Was meint ihr?

    Danke schon mal im voraus.
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Was daran falsch ist, ist ziemlich schwierig zu sagen, wenn man nicht weiss, was das Programm machen soll.

    Kompilieren lässt es sich in Bascom problemlos.

    Du muss dem Compiler vorher allerdings entweder über die Menüs oder durch einfügen der Zeile $regfile = "xxxxx.dat" mitteilen, für welchen Controller das Programm sein soll.
    Wenn du das nicht machst, bekommst du massenhaft "Ivalid Datatype" Fehlermeldungen.
    Ich glaube wenn man nichts anderes angibt, geht Bascom immer von einem AT90S2313 aus und der hat nicht alle Ports und Pins die dein Programm verwendet.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    Sorry mein Fehler,

    hab gedacht es ist nur ein Syntaxfehler oder etwas ähnlich einfaches.

    also hier nochmal der gesmmte Code:

    Code:
    Rem   Portc.0 = 1 --> Motor links vor
    Rem   Portc.1 = 1 --> Motor links rück
    Rem   Portc.2 = 1 --> Motor rechts vor
    Rem   Portc.3 = 1 --> Motor rechts rück
    
    Rem Sensor  links --> Porta.0 (sw =1)
    Rem Sensor rechts --> Porta.1 (sw =1)
    
    
    $regfile = "m32def.dat"
    $crystal = 4000000
    $baud = 9600
    
    
    
    Config Portc = Output
    Config Porta = Input
    
    
    
    Do
    
       If Porta = &B00000000 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
       If Pina = &B00000001 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
       End If
    
    
       If Pina = &B00000010 Then
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    
       If Pina = &B00000011 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    Loop
    Also dass Programm soll einfach zwei Sensoren auswerten und und die Motorschaltung damit füttern. Einfach damit mein Bot ner schwarzen Linie nachfahren kann.

    Hoffe es ist jetzt etwas verständlicher geworden.
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, Kollege !
    Weiche allen syntaktischen Feinheiten einfach mal aus und schreib (von oben nach unten)
    if Pina = 0
    if Pina = 1
    if Pina = 2
    if Pina = 3

    Gleich nach dem "do" solltest du auch lieber "PINA" statt "porta" schreiben.
    sonst seh ich aber nix falsches

    EDIT du fragst die Pins digital ab. Oder sind das analog-eingänge vom CNY70 oder sowas ?
    (das ging dann anders)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    So, Danke mal für die Antwort.
    Jetzt schaut mein Code so aus:

    Code:
    Rem   Portc.0 = 1 --> Motor links vor
    Rem   Portc.1 = 1 --> Motor links rück
    Rem   Portc.2 = 1 --> Motor rechts vor
    Rem   Portc.3 = 1 --> Motor rechts rück
    
    Rem Sensor  links --> Porta.0 (sw =1)
    Rem Sensor rechts --> Porta.1 (sw =1)
    
    
    $regfile = "m32def.dat"
    $crystal = 4000000
    $baud = 9600
    
    
    
    Config Portc = Output
    Config Porta = Input
    
    
    
    
    Do
    
       If Pina = 0 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
       If Pina = 1 Then
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    
       If Pina = 2 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
       End If
    
    
       If Pina = 3 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    Loop
    Aber fahren tut er trotzdem nicht.

    Wenn ich die Pins aber einzeln abfrage, also so:

    Code:
    Do
    
       If Pina.0 = 0 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
       If Pina.0 = 1 Then
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    
       If Pina.1 = 2 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
       End If
    
    
       If Pina.1 = 3 Then
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
       End If
    
    Loop
    Dann gehts. Nur kann ich dann logischerweise den Portc nicht in Abhängigkeit von zwei Pins vom PortA ansteuern.

    Verstehst du?
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Nur kann ich dann logischerweise den Portc nicht in Abhängigkeit von zwei Pins vom PortA ansteuern.
    Doch:
    Code:
    If pina.0=0 AND pina.1=0 then
     'mach was
    end if
    Gruß
    Christopher

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Aaaach, logo, alles klar !
    Wenn du mit = abfragst, vergleichst du natürlich ALLE pins ab, auch die, wo nix draufhängt
    Mach einen Zwischenschritt
    DIM Ctl as byte
    Ctl = 0
    DO
    Ctl.0 = Pina.0
    Ctl.1 = Pina.1

    if Ctl = 0 then ...
    if Ctl = 1 then ...
    if Ctl = 2 then ...
    if Ctl = 3 then ...

    Geht auch anders, egal.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    Jawohl, es funktioniert.
    Danke vielmals.

    Aber kann mir vielleicht jemand trotzdem erklären, warum es in der Binären schreibweis nicht gefuntzt hat?

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    Alles klar, PicNick war schneller.

    THX.

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Mit binär hat's nix zu tun , es geht darum, ob du einzelne Bits abfragst oder das ganze Byte. Man müßte die zwei fraglichen Bits maskieren und dann ginge es auch. Ich hab aber gehört, daß sich dabei schon mal einer die Finger gebrochen hat.

    EDIT: um was zu lernen, kannst du ruhig das Ctl-byte auch binär abfragen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress