- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Fehler bei Programmabarbeitung

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Powerstation Test
    Hat vielleicht nix damit zu tun, aber ganz allgemein:
    Seltsames Verhalten kann entstehen, wenn
    $HWSTACK =
    $SWSTACK =
    $FRAMSIZE =
    zu kleine Werte haben. Die Defaultwerte sind absolut miniwinz. Für einen Interrupt müssen z.B 64 Byte HWSTACK da sein, sonst scheppert's.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    @chr_mt : Sowas hatte ich auch schon mal, hatte auch gehofft, es liegt vielleicht daran, aber leider nicht. Warum auch immer, aber die Do-Loop Schleife scheint man immer schreiben zu müssen. Bei mir liefen sogar rein Interruptgesteuerte Programme ohne die Do-Loop Schleife nicht korrekt.

    @PicNick : Habe es auch mit Veränderung des Stacksize probiert, leider funktioniert aber auch das nicht.

    Sehr merkwürdig ist, dass das Programm tadellos läuft, wenn ich den Timer nicht verwende und alles in die Hauptschleife schreibe. Allerdings besteht dann eben das Problem, dass der Sensor nicht mit den geforderten 6kHz abgefragt wird. Irgendwas scheint nicht mit dem Timer zu stimmen.
    Es muss doch einen Grund dafür geben...

    Trotzdem Danke erstmal für die Hilfe!

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Moment: Was tut sich eigentlich bei get- und send-picture ?
    Immerhin ist es so, daß bei JEDEM Zeichen von der UART dem Controller für fast 1.5 Sekunden das Licht ausgeht.
    Vielleicht hat er einfach keine Zeit mehr für Dich ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Interessant, ist es nicht so, dass ein Interrupt nicht durch einen anderen gestört werden kann? Ich habe trotzdem mal "Timer1=0" in die I-Routine für den Zeichenempfang geschrieben, damit der Timer nicht irgendwo dazwischenfunkt, es läuft aber trotzdem nicht.
    Wenn ich vor Programmabarbeitung Modus auf 2 setze, ist alles umgekehrt: dann läuft der Kameramodus tadellos, jedoch ist eine Umschaltung auf den Bewegungsmodus nicht mehr möglich, das Programm scheint zu stoppen.

  5. #15
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    So oder so, es scheint, daß der Kamera-Modus ein Umschalten einfach nicht zuläßt.
    Mach statt get- sendpic irgendeinen print "ein bild", und schau, ob dann das Umschalten geht.
    ... allerdings konnte ich den Fehler ausschließen.
    Ein Tipp: solange du nicht weißt, was es ist , kannst du auch nicht sagen, was es NICHT ist. Sowas verklebt die Augen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Ok, habe statt Get_picture einfach einen Text ausgegeben, trotzdem lässt sich das ganze nicht umschalten. Get_picture braucht relativ lange (ca. 2ms), weil die einzelnen Pixel des Bildes seriell aus dem Sensor getaktet werden müssen. Noch sehr viel länger dauert natürlich die Übertragung der Bilddaten über die RS232. Die Sache mit der Bildübertragung ist nicht ganz so wichtig, muss aber funktionieren. Wichtiger ist die kontinuierliche Abfrage der Bewegungsdaten. Da der Sensor nur inkrementale Positionsdaten auswerten kann, verliert man leider schnell die Absolutposition, wenn ein paar Frames "nichts" mitbekommt, das ist das Problem an der Sache.

  7. #17
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wenn du "send_pic" auch noch erstmal wegläßt, reden wir weiter.

    By the way: Ich würde die positions-daten grundsätzlich in den Picture-stream einschleusen und garnicht umschalten.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Send_pic habe ich schon weggelassen. Die Positionsdaten kann ich nicht in den Picture-stream packen, weil dieser zu langam abgefragt wird. Außerdem kann der Sensor nur eine Sache gleichzeitig ausgeben.

  9. #19
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Nun, ich seh folgendes Problem:
    DIe Wahrscheinlichkeit, daß beim Zurückschalten auf mode 1 gerade das get- oder Send- pic läuft, ist groß. d.h. nach dem Interrupt kommt er erstmal dorthin zurück. Mode ist aber inzwischen = 1
    Daher wird auch sofort der Timer schnackeln und bevor get_ /send-pic reagieren kann, wird daher read-motion angeworfen.
    Der fährt also ins volle Leben.
    Versuch: setz einen Schalter BEVOR du get- send pic machst, und lösch ihn, wenn du rauskommst.
    In timer-Interrupt machst du NUR dann Read-Motion, wenn Mode= 1 UND dieser Schalter = 0.

    Noch was : tu dieses grauslichen Wait aus der Interrupt routine
    Vorschlag
    Code:
       Modus = 0
       Altmodus = Modus
    Do 
         if Altmodus <> Modus then 
            If Modus = 0 Then 
                Abspos_x = 0 
                Abspos_y = 0 
                Modus = 1 
            End If 
    
            If Modus = 1 Then Toggle Portb.1 
            If Modus = 2 Then Toggle Portb.0 
            Set Reset_chip 
            Waitms 300 
            Reset Reset_chip 
            Wait 1 
            Set Ncs 
            Altmodus = Modus
        End if
    
        If Modus = 2 Then 
            schalter = 1
            Call Get_picture() 
            Call Send_picture() 
            schalter = 0
          Else 
            Printbin Abspos_x ; Abspos_y ; Squal ; Motion ; Maximumpixel ; 13 ; 
        End If 
    Loop 
    
    '###############################################
    'Timer-Routine zur Abfrage der Sensor-Werte mit etwa 6kHz 
    Ontimer: 
        If Modus = 1 and schalter = 0 then 
            Call Read_motion() 
        End If 
        Timer1 = 65430 
    Return 
    '###############################################
    'Interrupt für den Zeichenempfang 
    Onrts: 
        Modus = Udr 
    Return
    Vielleicht hilft das auch nix, aber trotzdem ist es einfach sauberer.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #20
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Genau das war es, daran hat's gelegen. Ich danke Dir für Deine Hilfe, ohne Dich hätte ich das nicht hinbekommen, also nochmals vielen Dank!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad