- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: Unlösbares Problem mit PULSEIN ?? Tips gesucht!! Hilfe

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.03.2004
    Beiträge
    185
    Anzeige

    Praxistest und DIY Projekte
    m@rkus33
    Eine letzte Anmerkung (bevor der Admin mich wegen off-topic ermahnt):
    Wir dürfen nicht vergessen, welchen Nutzen wir selber aus der Community beziehen.
    ...übrigens ist ein Code allein noch kein Nachbau-Projekt.

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    @Hanni

    erstmal Danke für Deinen Vorschlag.
    Wenn ich das jetzt richtig verstanden habe, dann müsste ich Hardwaretechnisch an den PIN des INT0 den RC-Impuls legen und an den bisherigen RC-Impuls den Durchflussimpuls. Richtig? Also nur tauschen.

    Damit wäre der Durchflussmesser an einem Pin den ich für den Timer proggen kann und der RC-Impuls am Hardware INT0 Pin.
    Das ginge ohne Probleme, einfach die Stecker tauschen

    Wenn ich die Datenübertragung ins Main-Loop lege müsste ich dann mit "Waitms250" arbeiten. Dann wäre der Sendetakt in etwa gleich.

    Was ich jetzt noch nicht ganz verstanden habe ist die Geschichte mit den beiden Timern. Ich vermute mal, den Timer0 über die Durchflussimpulse als Counter verwenden. Bei jedem Überlauf den Wert sichern und mit dem nächsten Überlaufwert addieren. Zus. beim Überlauf die Impulsbreite messen.

    Hmm... mit dem Thema Flankenwechsel und Impulsbreitenmessung, da muss ich glaub ich noch etwas hier im Forum stöbern und die Hilfe von Bascom noch etwas in Anspruch nehmen.

    Toll wäre es, wenn es ohne Hardwareänderungen ginge. Ok Stecker tauschen wäre kein Thema.

    Merci und Gruß
    Markus

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Hmm, das Waitms könnte man auch weglassen.

    Hier mal ein möglicher Lösungsansatz für die oben beschriebene Vorgehensweise:

    Timer0 = Durchflusszähler (den Durchflussimpuls als Takt missbrauchen - T0 Eingang - PIN PD 4)
    Timer1 = ein Referenz Zeit Zähler mit einer Schrittweite von z.B. 8µs und einer Gesamtdurchlaufdauer, die sich leicht zum Weiterrechen verwenden lässt (z.B. 0,5 Sek).
    INT0 = RC Impuls

    Am Anfang den INT0 aus steigende Flanke konfigurieren.
    Irgendwann kommt die steigende Flanke des RC Impulses -> der Interupt löst aus und man landet in der ISR vom INT0.

    In dieser den Zählerstand von Timer 1 sichern und den INT0 auf die fallende Flanke konfigurieren.

    Irgendwann ist der RC Impuls beendet. (fallende Flanke). diese löst wiederum einen Interupt aus und man landet in der ISR.

    in dieser dann den gesicherten Zählerstand vom aktuellem Zählerstand des Timer1 abziehen, das Ergebniss abspeichern und den Interupt anschliessend wieder auf die steigende Flanke konfigureren.

    Der Referenzzeit Zähler erreicht irgendwann einen Überlauf.
    Dieser löst einen Interupt aus. In der ISR Prüft man nun, ob insgesamt schon 25 Sekunden rum sind (mittels eines Zählbytes). Wenn nicht, Zählbyte = Zählbyte+1, wenn ja, Zählbyte = 0 und ein Flag zum Starten der Übertragung setzen.

    Main Loop:

    Wenn das Flag zum Starten der Datenübertragung gesetzt ist:
    - Durchflusszähler auslesen und reseten
    - die Durchflussdaten auswerten
    - sonstige notwendige Daten errechnen
    - Daten übertragen.
    - das Flag löschen.

    Wenn das Flag nicht gesetzt ist:
    - warten, bis das Flag gesetzt ist.

    Ansonsten kann ich dir nur empfehlen, das Datenblatt vom ATMEGA 8 mal wieder rauszukramen und dort mal die Seiten 67 (externer Interupt 0) und die Seiten 69 ff. (Timer 0) mal durchzulesen.

    Grüße,

    da Hanni.

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Hallo Hanni,


    ja das klingt wirklich gut! Das hab ich kapiert . Die Referenzzeit habe ich umgesetzt und funktioniert prima. Jetzt muss ich nur noch schauen wie ich am einfachsten den Durchflusszähler auf TO bekomme. Den habe ich dummerweise nicht mit einem Lötpad versehen. Das war wirklich dumm von mir, alle anderen freien Pins haben eins, nur der nicht. Ok, mache ich halt ne neue LP.

    Das mit RC auf INT0 werde ich heute mal ausprobieren.

    Vielen, vielen Dank für den Lösungsansatz ich denke das funktioniert.

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Na dann viel Erfolg.

    Grüße,

    da Hanni.

  6. #26
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Hi Hanni,

    konnte mal etwas spielen. Jetzt habe ich nur eine (ganz dumme) Frage:

    Ich habe den Timer0 als Counter konfiguriert, leider zählt er nicht. Was hab ich falsch gemacht. Ich möchte das er bei jedem Impuls den Wert nur um eins erhöht.

    Impuls liegt nun an Pind.4

    So sieht der Timerteil im Code aus:

    Dim Impulse as Long

    Config Pind.4 = Input
    Portd.4 = 1

    Config Timer0 = Counter, Edge = Falling, Prescale = 1024
    Timer0 = 254

    On Timer0 dfm
    Enable Interrups
    Enable Timer0

    Do

    "Hauptschleife"...bla,bla

    Loop


    dfm:

    Incr Impulse
    Timer0 = 254
    Return


    Bin ich jetzt doof? Ich kann da keinen Fehler erkennen ????

    Gruß
    Markus

  7. #27
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Ne, doof biste nicht. Du hast nur einen kleinen Denkfehjler drin.

    Wenn der Timer als Counter konfiguriert ist, hast du den Prescaler nicht zur Verfügung.
    Dieses liegt darin begründet, das du auch dieses defakto im TCCR Register mit den Bits CS?0 - CS?2 einstellst. Schau mal ins Datenblatt, dann siehst du sofort was ich meine.


    Grüße,

    Da Hanni.

  8. #28
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2005
    Beiträge
    161
    Mensch, ich bin doch doof.... Prescaler raus und schon gehts. Hmm, jetzt hab ich alles umgebaut aber mit dem Pulsein werde ich nicht glücklich.

    Jetzt läuft der Durchflussmesser auf dem Timer1, der Sendetakt der RS232 Daten kommt vom Timer0, den INT0 habe ich komplett entfern.

    Komisch ist, das der Pulsein ab ca. 500 I/min vom Durchflussmesser gar nicht mehr misst. Ich habe die Vermutung, das die Zeit die zwischen den Impulsen vom Durchflussmesser ab dieser Grenze einfach zu kurz wird um die RC-Impulsmessung per Pulsein zu erlauben. Kann das sein?

    Ich dachte das die Zählung der Durchflussmesser Impulse jetzt über den Timer1 "nebenbei" laufen kann.

    Auch eine Änderung des Quarzes auf 7.3728 Mhz hat nix gebracht. Da macht der Pulsein gar nicht mehr mit. ?????

    Ich werd noch verrückt, irgendwas mach ich doch da falsch... oder nicht?




    Gruß
    Markus

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Wie gesagt: Versuch den RC Impuls auf den INT0 zu legen und miss die Impulsbreite.

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests