- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 15

Thema: Empfängersignal mit ATtiny13A erkennen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    Warum schreibst du PORTB = 0b00000000; ? Portb ist beim einschalten automatisch 0x00 (steht im DB).

    Warum konfigurierst du 2 Interrupts, das ist vermutlich auch der Fehler. Du konfigurierst einmal INT0 und PCINT0, INT0 ist PB1 und PCINT0 ist PB0. Du reagierst aber nur auf den PCINT, ich vermute das du den Empfänger auf PB1 (INT0) angeschlossen hast. Eigentlich sollte es aber Warnungen geben wenn du es kompilierst. Warum schaltest du eigentlich die Interruptfreigabe aus?

    MfG Hannes

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    okay ich werf fragen hinterher, wozu einen WaveForm Modus?
    Code:
    //Einstellungen Timer / PWM
        TCCR0A = ((1<<WGM00) | (1<<WGM01));     //FastPWM (Top=0xFF Update of OCRx at = TOP TOV Flag Set on = MAX)
        TCCR0B = (1<<CS01);            //Prescaler clk/8
    lass TCCR0A einfach auf initial Zustand! Normaler Zählmodus, kein PWM das ist nutzlos!

    1.2MHz / 8 = 150kHz -> 8bit = 265 counts -> 1/150kHz * 256 = 1.70666 mS
    sollte alos für den maximal möglichen 1.5mS Puls reichen

    du initialisierst den Timer OHNE clockselect, du lässt CS einfach komtplett weg! Damit steht dein Timer!

    in der ISR, bei steigender Flanke, startest du den timer indem du die CS01 setzt

    bei fallender Flanke stoppst du den timer, indem du die CS Bits weider auf 0 setzt, prüfst du zuerst das TIFR Register ob das Overflow Bit gesetzt ist, löschst es (eine 1 auf das bit schreiben, keine 0) und verwirfst die Messung (Die High Phase war offensichtlich länger als 1.7mS)
    wenn das OVF Flag nicht gesetzt ist schreibst du den TCNT wert auf und verarbeitest die gemessenen zeit und setzt TCNT wieder auf 0

    so sparst du sogar in den low phasen noch strom weil dein timer nciht die ganze zeit sinnlos mitrennt
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2017
    Beiträge
    23
    HI

    Habe nun alles mit Hilfe eurer Antworten nochmal überarbeitet. Jetzt funktioniert es!
    SUPER! Danke für eure Hilfe

    Gruß
    Lichti01

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    Was war der Fehler?

    MfG Hannes

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2017
    Beiträge
    23
    HI

    Ich denke, dass der ausschlaggebende Punkt war, dass ich den Timer nicht gestartet habe.
    Außerdem habe ich den INT0 rausgenommen sowie den Timer auf initial Zustand gelassen.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.095
    Der Timer war schon gestartet. Den hast du gestartet indem du CS00 und CS01 gesetzt hast. Ich vermute das sich das Programm ins Nirvana verabschiedet hat weil du den Int0 Interrupt konfiguriert hast, aber nicht in die ISR gesprungen bist.

    MfG Hannes

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.261
    Ich mach die Servosignal Auswertung auch gerne mal mit dem INT0.
    Der Trick dabei ist, im Interrupt das Sensing von steigende Flanke auf fallende Flanke um zu konfigurieren.
    Und in einem zweiten Schritt wieder umgekehrt.

    Du initialisierst also erstmal den Interupt 0 auf steigende Flanke und startest dann die Hauptschleife.
    Ein Timer zum messen der Impulslänge muss auch noch gestartet werden, braucht aber prinzipiell keinen Interrupt - Ich nehm da meistens einen 16 Bit Timer mit einem Prescaler von 8.

    Tritt nun der steigende Interrupt auf wird in der Interrupt Routine das TCNT Register des Timers ausgelesen und in einer volatile Variable abgespeichert.
    Jetzt wird dann auch das Sensing auf fallende Flanke umgestellt.

    Kommt nun die fallende Flanke wird der INT0 wieder aufgerufen.
    Es wird wieder der TCNT ausgelesen und der vorher abgespeicherte Wert der Variable abgezogen.
    Das Ergebnis wird nun in einer weiteren volatile Variable abgespeichert und gibt das Maß der Impulslänge an.
    ( Bei 8MHZ und Prescaler 8 in µs, Bei 16MHz µs*2, also halbe µs Schritte ).
    Nun das sensing wieder auf steigende Flanke umstellen für den nächsten Impuls.
    Man kann auch noch eine weitere Variable als FLAG setzen, damit das Hauptprogramm weiß, das ein neuer Impuls eingetroffen ist.
    Man muß lediglich darauf aufpassen, das bei einer maximalen Impulslänge der Timer nicht überläuft - Das kann aber eigentlich nur passieren, wenn man die Pausen auswertet.

    Ich weiß - Das Ganze geht auch mit Pin Change.
    Das INT0 Verfahren funktioniert aber auch mit Controllern die keinen Pin Change Interrupt haben.

    Eine weitere Möglichkeit wäre noch der Input Capture Interrupt eines Timers, wenn man noch zusätzliche Eingänge braucht.

    Das Verfahren ist aber prinzipiell immer gleich, mal die steigende, dann die fallende Flanke des Signals auszuwerten.

Ähnliche Themen

  1. ATTiny13A Schalter abfragen/entprellung mit Variablen
    Von Denn Is im Forum C - Programmierung (GCC u.a.)
    Antworten: 19
    Letzter Beitrag: 01.07.2014, 11:21
  2. Attiny13a RS232
    Von flecralf im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 09.10.2013, 18:27
  3. Empfängersignal auswerten. (Modellbauempfänger PWM )
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 16.10.2008, 00:04
  4. gcc erkennen?
    Von bluebrother im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 09.11.2005, 12:10
  5. Empfängersignal digitalisieren
    Von srem im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 14.02.2005, 20:31

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests