- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: Verständnisfrage: Summensignal auswerten

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622

    Verständnisfrage: Summensignal auswerten

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe mir mit Code aus dem Forum folgendes Programm zum Auslesen des Summensignal meines RC-Empfängers zusammengebastelt:

    Code:
    $regfile "m32def.dat"
    $framesize = 42
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    Config Timer0 = Timer , Prescale = 256                      'Timer0 auf 16µs/Takt, Überlauf bei ca. 4ms
    Enable Timer0
    On Timer0 Sync
    Config Int0 = Falling
    Enable Interrupts
    Enable Int0
    On Int0 Signalmessung
    
    Dim Kanal(7) As Byte
    Dim Channel As Byte
    
    Do
    
    Print "  " ; Kanal(1) ; "  " ; Kanal(2) ; "  " ; Kanal(3) ; "  " ; Kanal(4) ; "  " ; Kanal(5) ; "  " ; Kanal(6) ; "  " ; Kanal(7)
    
    Loop
    
    
    Signalmessung:
    Kanal(channel) = Timer0
    Timer0 = 0
    Incr Channel
    Return
    
    
    Sync:
    Channel = 0
    Return
    Das Auslesen der 7 Kanäle klappt wunderbar, allerdings verstehe ich einen Teil im Code nicht.

    Code:
    Sync:
    Channel = 0
    Return
    Das ist noch klar. Bei einem Überlauf des Timers (verursacht durch die Pause im Signal) wird channel auf 0 gesetzt.

    Code:
    Signalmessung:
    Kanal(channel) = Timer0
    Timer0 = 0
    Incr Channel
    Return
    Auf die Pause folgt der 1. Kanal, dieser endet mit einer fallenden Flanke (die erste nach der Pause) und löst den Int0 aus. Dann wird doch dort der Timer an Kanal(0) übergeben, da channel ja durch den vorhergehenden Sync-Aufruf auf 0 steht.

    1.) Kanal(0) ist aber doch gar nicht im Array Kanal(7) enthalten.
    2.) Warum finde ich den Wert von Kanal 1 in Kanal(1) und nicht (s.o) in Kanal(0)?
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Irrtum vorbehalten:
    die fallende Int0 sagt aus, das der Kanal vorher zu ende ist UND der nächste beginnt.
    Beim ersten Impuls gibt's keinen Vorgänger, daher schreibt er den Timer0 nach Kanal(0) (= Nirwana)
    erst der zweite impuls/flanke definiert die breite des ersten Kanals, und der landet ja dann in Kanal(1)



    edit: das programm ist allerdings tricky, denn
    kanal(0) ist eigentlich das Byte VOR dem array

    wenn da was anderes definiert ist, kann es krachen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622
    Ja,

    ich sehe gerade, dass die Pause "High-Signal" hat, dann stimmt es.
    Wie bekomme ich heraus, was vor dem Array definiert ist? Ist es automatisch das vorher definierte Byte?

    Andererseits definiere ich das Array als Kanal( 8 ), setze channel beim Sync auf 1 und ignoriere diesen Wert ---> Problem behoben.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Du hast sonst eigentlich nix definiert, also beginnt dein Array vermutlich bei &H60 (genaueres in der .RPT-file)
    auf &H5F ist beim m32 das SREG (statusregister), welches er überschreibt.
    --> Glück: das wird sowieso bei vielen Befehlen frisch gesetzt, also kann die Sache klappen.

    Sauber wäre, ein "buffer" byte davor zu definieren
    Code:
    DIM  Buffer AS BYTE          ' da kann er reinpinseln, wenn er mag 
    Dim Kanal(7) As Byte
    Dim Channel As Byte
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    47
    Beiträge
    622
    Hi,

    ich hatte vor diesem Post bereits weiter an dem Programm gebastelt (Fehlererkennung). Obwohl die (vorher definierte) Variable im Programm nicht gesetzt/geändert wird, änderte sich der Wert (testweise ausgegeben) trotzdem.
    Jetzt weiß ich ja, warum...
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad