-
        

Ergebnis 1 bis 6 von 6

Thema: Picaxe 08M Programmierproblem! Bitte um hilfe.

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    Picaxe 08M Programmierproblem! Bitte um hilfe.

    Anzeige

    Ich möchte einen alten Servo selbst steuern. Infos in einem anderen thema:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=16828
    Die Steuerung rechts links klappt auch wunderbar, nur leider scheint irgendwo in meinem Prog ein fehler zu stecken, den ich nicht finde. Nach dem programmstart wird die Mittelstellung angefahren. das ist schonmal super. sobald dann aber das Programm in "loop" steckt, scheint es durchgehend nur noch auf IR Signale zu warten. Normal sollte es ja wieder zu "startloop" spriingen, wenn keine IR Signale Empfangen werden. Wie kann ich das beheben? Lenken ist so ja möglich, aber der Servo soll ja automatisch auf Mittelstellung fahren, wenn keine IR Signale mehr kommen.

    Bin am Verzweifeln.

    Programm:
    symbol rechts = 1 `rechts ansteuerung ausgang 1 Pin 6
    symbol links = 2 `links ansteuerung ausgang 2 Pin 5
    symbol position = b0 `Speicherort Position

    startloop:
    goto mittelstellung

    loop:
    low rechts
    low links
    infrain2
    if infra = 1 then lenkr
    if infra = 2 then lenkl
    goto startloop

    lenkr:
    readadc 4,b0 `lese den Analogwert in b0 (Aktuelle Position)
    if b0 > 236 then goto loop
    high rechts `rechts vollausschlag lenken
    goto lenkr

    lenkl:
    readadc 4,b0 `lese den Analogwert in b0 (Aktuelle Position)
    if b0 < 20 then goto loop
    high links `links vollausschlag lenken
    goto lenkl


    `Auswertung der Servostellung
    ` 5V = rechts = 256 (in Auswertung rechts = sobald größer 236)
    `2,6V = mitte = 133
    ` 0V = links = 0 (in Auswertung links = sobald kleiner 20)

    mittelstellung:
    for b1 = 1 to 20
    pause 20
    readadc 4,b0 `lese den Analogwert in b0 (Aktuelle Position)
    if b0 > 162 then goto linksdrehen
    if b0 < 150 then goto rechtsdrehen
    next b1
    goto loop

    linksdrehen:
    high links `links drehen
    pause 20 `für 0,02sec
    low links
    goto mittelstellung

    rechtsdrehen:
    high rechts `rechts drehen
    pause 20 `für 0,02sec
    low rechts
    goto mittelstellung

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    Moin Mirco,

    da hast Du recht: INFRAIN wartet solange, bis ein Signal eintrifft.

    Beheben kannst Du das, indem Du den Eingang zuächst auf einen Interrupt legst und dann in der Interrupt-Routine mit INFRAIN den Code einliest. Eigentlich kein Problem, weil der Code vom Sender normalerweise mehrfach wiederholt wird.

    Nice weekend,
    Zardoz

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105
    Zitat Zitat von zardoz
    Moin Mirco,
    da hast Du recht: INFRAIN wartet solange, bis ein Signal eintrifft.
    Beheben kannst Du das, indem Du den Eingang zuächst auf einen Interrupt legst und dann in der Interrupt-Routine mit INFRAIN den Code einliest. Eigentlich kein Problem, weil der Code vom Sender normalerweise mehrfach wiederholt wird.
    Nice weekend,
    Zardoz
    Danke für die Info, aber selbst wenn ich die Ir Befehle erst durch den Interrupt einlese, hänge ich ja wieder im Infrain Befehl fest! Ich muss ja aber nach Empfang des IR Signales wieder "zurückkommen"um meine Rutine für die Mittelstellung ausführen zu lassen (Automatisch wenn halt keine Steuerbefehle mehr ankomen).
    Also das gleiche Problem wie jetzt auch.

    Schade. dachte, dass man evtl. es so Proggen kann, dass nur eine bestimmte Zeit der IR Empfang geprüft wird und dann automatisch die Rückkehr zum Programm folgt.

    Na dann werde ich den IR Empfang wohl anders lösen müssen, bzw. darauf verzichten.

    Grüße Mirco

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2006
    Beiträge
    18
    selbst wenn ich die Ir Befehle erst durch den Interrupt einlese, hänge ich ja wieder im Infrain Befehl fest
    Wieso das? Mit Start der IR-Sendung wird der Interrupt ausgelöst, in der Interruptroutine wird mit INFRAIN das Signal decodiert und ausgewertet. Danach kannst Du solange treiben was immer Du möchtest, bis Du den Interrupt wieder eingeschaltet hast und eine neue IR-Sendung den Interrupt erneut auslöst.

    Nice weekend,
    Zardoz

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105
    Na aber in der Interrupt Rutine würde dann ja als erstes wieder die Abfrage der IR Signale kommen. Also genau das gleiche wie in meinem Momentanen Programm, womit ich ja wieder an dem Punkt bin, wo ich jetzt auch bin.

    Im Momentanen Programm frage ich den IR Empfang ab. Selbst wenn ich was Empfangen habe, scheint das Programm durchgehend weiter den IR Empfang zu erwarten. Das Programm führt den zu dem Signal gehörenden Befehl aus (Bsp.: nach rechts) und dann scheint es hier festzuhängen. (Weitere IR Befehle werden aber ausgeführt!).

    Sonst müßte es ja zu "startloop" springen. Das macht es nie (ausser direkt einmal nach Start des Programms, da es ja der erste Befehl ist).
    Wo liegt denn dann der Unterschied wenn ich es in der Interrupt Rutine unterbringe? Wie kommt der Picaxe da wieder aus der ich nenne es mal "Empfangsschleife" raus?

    Programmausschnitt:

    startloop:
    goto mittelstellung

    loop:
    low rechts
    low links
    infrain2
    if infra = 1 then lenkr
    if infra = 2 then lenkl
    goto startloop
    Ich nochmal.
    So habe mir das ganze nochmal durch den Kopf gehen lassen. Könnte doch so klappen wie du sagtest. Erstmal verstehen . Nachdem ich mich nun ein wenig belesen habe, werde ich es mal wie von dir vorgeschlagen probieren. Manchmal sieht man den Wald vor lauter Bäumen nicht.
    Melde mich, sobald es Ergebnisse gibt.

    Danke erstmal Mirco

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Alter
    38
    Beiträge
    105

    auch mit Interrupt funktioniert es leider nicht.

    Hallo.
    Wollte mich mal zurückmelden und Infos geben, was daraus geworden ist.
    Also die IR Steuerung habe ich vorerst auf EIS gelegt.

    Auch mit dem Interrupt funktioniert es nicht wie gewollt.
    Der Interrupt wird zwar erkannt und auch ausgeführt, aber weitere IR Befehle werden trotz reaktivieren des Interrupts nicht ausgeführt!

    Vermutlich liegt es daran, dass ich im Interrupt nicht nur einfach irgend einen Schaltbefehl ausführen muss, sondern in andere Programmteile springen muss (um die gewünschte Stellung anfahren zu können.
    Somit gelangt das Programm nicht wieder zurück in dienInterruptrutine, und kommt auch nicht zu dem erwarteten "return" am Ende der Rutine.

    Habe bestimmt 100 Mal umprogrammiert und getestet... nun habe ich es aufgegeben. Aber auf jeden Fall habe ich nun schonmal gelernt wie der Interrupt funktioniert!

    Hierfür vielen Dank.

    Meine Aktuelle Steuerung wird nun über ein altes Handy ausgeführt. Hierzu aber demnächst mehr unter "Vorstellung". (Und dasss funtzt auch schon super!!!!)
    Grüße Mirco

Berechtigungen

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