-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Impulse messen - Fehlmessung

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

    Impulse messen - Fehlmessung

    Anzeige

    hi,

    ich versuche ca. 800 impulse in einem abstand von 500 mikrosekunden im pic zu speichern, aber irgendwie kommen manchmal nicht alle impulse an oder werden aus irgend einem grund nicht gespeichert.

    wenn ich die impulse aber am lpt-port vom pc abfrage bekomm ich immer alle rein.

    vor kurzem gings fast gar nicht am pic, weil ich die impulse am PORTD abgefragt ab und weil des ja ein Schmitt-Trigger-Eingang ist ging des nicht jetzt frag ich die Impulse am PORTB ab, welches ja TLL-Eingänge sind und da hat sich des mit dem speichern ziemlich gut verbessert aber trotzdem geht es am pc immer noch besser und des muss auch noch am pic so gehen.

    der pic wird mit 10mhz quarz versorgt, daran sollte es normal nicht liegen.

    was könnte ich noch machen.
    entstören mit kondensator vielleicht?

    mfg
    pitt

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2006
    Beiträge
    29
    Hallo,
    wie werden die abgefragt:
    pollen oder interrupt.
    ich habe keine Probs damit wenn ich Impulse über ein RB0/INT Eingang
    im ISR-Routine Zähle. (INTE muss initialisiert werden).
    Oder kannst du auch CCP-Eingang benutzen.
    Grüß,
    Alex

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Hallo pitt,
    was nennst Du speichern ?
    Falls Du Daten im Eeprom speicherst / reinschreibst, dieser Vorgang dauert wenige MilliSekunden; da können Daten verloren gehen.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.07.2005
    Beiträge
    170
    hi,

    des is so ein abgefackter scheiss warum geht des net, man seit fünf tagen arbeite ich an diesem problem jetzt tag bis sieben uhr in der früh und ich krieg den scheiss einfach nicht hin.

    also nein ich schreib des nicht in eine eeprom rein sonst würd ich wahrscheinlich nicht einmal 200 impulse reinbekommen.

    ich zähle nicht die impulse sondern der pic schaut wie lange die impulse an sind.
    des wird mit nem timer gemessen und dann in der sram abgelegt.

    jedenfalls weiss ich zu 100% dass es nicht am programm oder an der schnelligkeit vom pic liegt es hat ganz sicher was mit der elektronik zu tun.

    weil es geht ja jetzt schon besser weil ich von schmitt-trigger-eingängen auf tll-eingänge umgestiegen bin.

    aber der pc liest immer noch alle impulse und nicht weil er schneller ist als der pic sondern weil der lpt-port ganz sicher besser entstört oder sonst was ist als die eingänge von meinem pic.

    mfg
    pitt

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    34
    Beiträge
    506
    wie sieht denn dein messablauf aus?

    Auf Flankenwechsel warten -> Timer starten -> auf nächsten Flankenwechsel warten -> Timer stoppen -> Wert im Ram speichern
    ?

    machst du irgendwas, das auf interrupts basiert?
    wenn ja, hast du die interruptprioritäten richtig eingestellt?
    wie sehen denn die impulse aus? hast du zufällig ein oszi-bild davon?

    MfG
    Stefan

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Hallo,
    ich habe externe Signale am liebsten über Schmitt-Trigger-Eingänge, weil das sauber und sicher ist.
    Vielleicht kommt ja schon mal ein Impuls schneller, als Dir lieb ist bzw. die SIO noch nicht fertig ist. Ich weiß ja nicht was und womit Du programmiert hast.
    Wenn Du Assembler nimmst, kannst Du bei meinen PIC Assembler-Beispielen reinschauen. Dort ist eine serielle Kommunikation mit Ringpuffer zum Senden und Empfangen (und natürlich noch mehr): http://www.domnick-elektronik.de/picasm.htm Vielleicht hilft es Dir weiter ?
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.07.2005
    Beiträge
    170
    hi,

    also ich programmiere mit assembler.

    aber um die ganzen fragen zu beantworten kann ich euch ein programm-beispiel zeigen bei dem des nicht funktioniert.

    Code:
    list p=18f4525
    #include <P18f4525.INC>
    
    
    __config _CONFIG2L, _PWRT_ON_2L
    __config _CONFIG2H, _WDT_OFF_2H
    __config _CONFIG1H, _OSC_HS_1H
    __config _CONFIG4L, _LVP_OFF_4L & _ENHCPU_OFF_4L
    
    
    movlw B'00000001'
    movwf TRISB
    movlw B'00001111'     ; analoge Eingänge ausschalten
    movwf ADCON1
    clrf PORTB
    clrf LATB
    
    
    clrf TRISD
    clrf PORTD
    clrf LATD
    
    
    clrf statenew2     ; Speicherzelle leeren
    clrf stateold2     ; Speicherzelle leeren
    
    
    
    main
    movlw D'0'            ; Zahl 0 in Arbeitsspeicher
    btfsc PORTB,0         ; Falls PORTD,7 auf LOW, dann überspringe nächsten Befehl
    movlw D'1'            ; Zahl 1 in ARbeitsspeicher
    movwf statenew2        ; Zahl 0 oder 1 in Speicherzelle aus Arbeitsspeicher kopieren
    xorwf stateold2,0      ; Arbeitspeicher mit neuem Zustand mit Speicherzelle mit altem Zustand vergleichen
    btfss STATUS,Z        ; Falls beide Zustände gleich dann überspringen nächsten Befehl
    call savestate2        ; Routine aufrufen
    goto main
    
    savestate2
    movff statenew2,stateold2   ; Jetzigen Zustand speichern, für später zum Vergleich
    btfss statenew2,0    
    bcf PORTD,5           
    btfsc statenew2,0    
    bsf PORTD,5           
    return
    
    end

    hier in dem beispiel wird nichts anderes gemacht als wenn ein signal empfangen wird einfach weiterzuleiten.
    des mit dem timer und speichern habe ich alles rausgenommen.

    woran könnte es jetzt noch liegen.
    obwohl ich langsam glaube dass man da gar nichts von aussen, also an der elektronik entstören müsste weil ich mir so schaltpläne von RS232 schnittstellen angeschaut habe und da ist auch nichts entstört.

    also muss es etwas ganz blödes kleines sein.

    mfg
    pitt

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2006
    Beiträge
    29
    Morgen,
    also bei dir können die Messungen verloren gehen, weil du den Port in Main-Schleife abfragst.
    Und wenn du schon PORTB0 als Eingang hast, wäre viel eifacher und sichere über INTE-Interrupt die Impulse zählen.
    Ob alles korrect am Port kommt kannst du auch mit Oszi prüfen.
    Grüß,
    el_net_fun

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.07.2005
    Beiträge
    170
    hi,

    und was is wenn ich nicht den portb und damit keine interrupts benutzen würde wie soll ich des dann machen geht des dann nicht mehr oder was?

    oszi habe ich leider nicht.

    mfg
    pitt

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2006
    Beiträge
    29
    Dann musst du mit timer-interrupt Port abfragen.
    timer so einstellen dass dir keine Impulse verloren gehen können,
    und im ISR-Routine (timer overload) Portzustand abfragen.
    Ohne Interrup bist du nie auf sichere Seite.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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