-         

Ergebnis 1 bis 5 von 5

Thema: Protokoll mit PIC aufzeichen und in Ram speichern

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.07.2005
    Beiträge
    170

    Protokoll mit PIC aufzeichen und in Ram speichern

    Anzeige

    hi leute,

    ich versuch gerade ein protokoll zwischen meinem pc und einem kleinen gerät rauszufinden.
    Das Gerät ist am lpt-port angeschlossen.
    Eigentlich ist es ganz leicht, weil der computer an das gerät nichts sendet, sondern nur das gerät an den computer und zwar nur mit einer datenleitung bzw. nur an einem pin des lpt.
    zwischen meinem pc und dem gerät hängt mein pic, der alles aufzeichen soll, aber irgendwie stimmt da was nicht.

    die software zu dem gerät aufm pc liesst die daten die vom dem gerät gesendet wurden und überprüft ob diese richtig gesendet wurden.
    jetzt hängt mein pic dazwischen und alles was von dem gerät reinkommt am RC5 gibt er am RD5 wieder zum pc aus. es wird alles richtig übertragen.

    jetzt sollte der pic die daten, die in der ram gespeichert wurden nochmal an den pc übertragen, aber jetzt sind die daten die am pc ankommen nicht mehr vollständig bzw. total falsch.

    woran kann das liegen. der code ist eigentlich ziemlich einfach aufgebaut

    der pic soll nichts anderes machen als die zustände vom gerät annehmen und dann speichern und dann einfach zum pc weiterleiten.
    also das annehmen der zustände und weiterleiten funktioniert sicher, weil die daten am pc richtig ankommen.
    aber ob der pic diese zustände in der ram richtig ablegt, dass weiss ich nicht.

    dann soll der pic die gespeicherten zustände aus der ram an den pc senden.

    also ich weiss jetzt nicht ob der pic die zustände nicht speichert oder ob die zustände richtig gespeichert werden aber falsch gesendet werden.



    Code:
    .
    .
    .
    movlw D'48'
    movwf cablep6
    movwf cablenp6
    movlw D'1'
    movwf count
    movwf multicount
    lfsr FSR0,0x70
    
    main
    btfss PORTC,5      ; TESTE LEITUNG OB AUS
    movlw D'48'
    btfsc PORTC,5      ; TESTE LEITUNG OB AUS
    movlw D'49'
    movwf cablenp6   ; SPEICHERE ZUSTAND
    xorwf cablep6,0    ; ÜBERPRÜFE ZUSTAND MIT ALTEM ZUSTAND
    btfss STATUS,Z
    call savepc6
    
    btfsc PORTB,2      ; WENN GEDRÜCKT DANN DIE DATEN VOM RAM AN PC SENDEN
    call sendpcstart
    goto main
    ;######################################################
    ;######################################################
    ;######################################################
    ;######################################################
    ;savecablepc6     ZUSTÄNDE VOM GERÄT IN RAM SPEICHERN UND ZUM PC WEITERLEITEN
    savepc6
    movf cablenp6,0    ; ZUSTAND IN CPU
    movwf cablep6
    movwf POSTINC0   ; ZUSTAND IM RAM SPEICHERN
    btfss cablep6,0
    bcf PORTD,5          ; LEITUNG ZUM PC AUF LOW SETZEN
    btfsc cablep6,0
    bsf PORTD,5          ; LEITUNG ZUM PC AUF HIGH SETZEN
    bcf STATUS,Z
    incf count,1           ; ZUSTÄNDE ZÄHLEN
    btfsc STATUS,Z     ; FALLS ÜBERLAUF
    incf multicount,1    ; ERHÖHEN
    return
    ;######################################################
    ;######################################################
    ;######################################################
    ;######################################################
    sendpcstart       ; GESPEICHERTE ZUSTÄNDE VOM RAM ZUM PC LEITEN
    movf count,0
    movwf oldcount
    movf multicount,0
    movwf oldmulti
    lfsr FSR0,0x70
    sendpcc
    btfss INDF0,0
    bcf PORTD,5
    btfsc POSTINC0,0
    bsf PORTD,5
    movlw .60
    movwf loops
    warte
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    decfsz loops,1
    goto warte
    decfsz count,1
    goto sendpcc
    decfsz multicount,1
    goto setcount
    
    movf oldcount,0
    movwf count
    movf oldmulti,0
    movwf multicount
    return
    
    setcount
    movlw D'255'
    movwf count
    goto sendpcc

    wäre sehr dankbar für hilfreiche antworten

    mfg
    pitt

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Zitat Zitat von Pitt1986
    der pic soll nichts anderes machen als die zustände vom gerät annehmen und dann speichern
    Der PIC führt nur die im Programm enthaltene Befehle aus, sonst "weißt" er nicht, was er machen "soll". Ich sehe in Deinem Code die Speicherung überhaupt nicht. Deswegen speichert er gar nichts, oder?
    MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.01.2005
    Beiträge
    79
    Hey Pitt1986!

    Zeige uns doch bitte den kompletten Code und erläutere Deine Beschaltung.
    Was ist das für ein "kleines Gerät" ??

    Kannst Du irgendwelche Annahmen machen wie die Daten aussehen könnten die Du aufzeichen möchtest??
    Werden sie synchron, asynchron übertragen??
    Wie siehts aus mit der Größe der Daten??
    Wie schnell ist die Übertragung??

    Eine große Vereinfachung würde ein digitales Osziloskop darstellen, mit dessen Hilfe Du die Signale "sichtbar" machen könntest.

    Wie PICture schon schrieb, kann ich auch nicht erkennen an welcher Stelle der PIC die Daten speichert.
    Ich sehe da eine Variable: cablepc6, ist das dein reservierter Speicher für die Daten?
    Dein Code ist sehr schlecht zu lesen, bist eher geizig mit den Kommentaren.. Ich werde jetzt nicht spekulieren was dein Programm im Einzelnen bewirkt.. Deswegen wäre es nicht schelcht wenn Du uns Deinen Algorythmus erläutern könntest, vielleicht ist er fehlerhaft.
    Ausserdem wäre es ratsam einen Interrupt zu verwenden um die daten auszulesen.

    Gruß
    lk

    ps: achso, welchen PIC verwendest Du?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Auf dieser Seite findest Du PIC Assembler-Beispiele mit RS232 und Ringpuffern zur Ablage der empfangenen und zu sendenden Bytes. Und noch einiges mehr.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    310

    Re: Protokoll mit PIC aufzeichen und in Ram speichern

    Hi Pitt,

    habe mir jetzt nicht alles im Detail angeschaut oder in den Debugger rein genommen, (keine Lust den Kopf zu schreiben) aber ich hoffe jetzt mal das Deine Speicherfunktion zeitgleich wie die Ausgabe arbeitet.

    Erstens was für einen Pic hast Du denn, Du speicherst ab 0x70 ( lfsr FSR0,0x70) die Daten, viele passen da nicht rein, dann ist Schluss mit aufzeichen, bei meinen 18F442 bei 0x2FF und bei vielen ist schon bei weniger Schluss.

    Und wenn ich irgendwas geloggt habe habe ich auch "keine" Änderungen gespeichert, oder die Zeit wie lange das Signal angelegen hat, sonst macht man ja aus "10001101" -> "10101"
    und das sieht mir hier so aus

    movwf cablenp6 ; SPEICHERE ZUSTAND
    xorwf cablep6,0 ; ÜBERPRÜFE ZUSTAND MIT ALTEM ZUSTAND
    btfss STATUS,Z
    call savepc6

    Ok, aber habe es jetzt auf die schnelle nur überflogen, also Sorry falls ich was übersehen habe...

    Gruß André

Berechtigungen

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