- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 13

Thema: TIME funktioniert nicht beim ATtiny44, wie kann ich das Problem lösen?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Hallo Naubaddi und Willkommen im Forum

    Sorry für die späte Antwort. Ich würde dein Programm ein bisschen ändern.
    Ich kenne mich mit Bascom nicht aus, dadurch kann ich dir keinen Code zur Verfügung stellen.
    Ich kann es aber als Pseudocode schreiben, den du in Bascom ändern kannst.

    Ich weiß nicht ob Bascom Interrupts unterstützt, wenn ja, dann würde ich diese verwenden.
    In den Interrupt schreibst du (wenn du pro Spur einen Interrupt hast, "x" ist deine Spur):
    Code:
    Runden_Spur_x = Runden_Spur_x + 1
    Oder wenn du einen Pin Change Interrupt hast und beide Spuren in einem Interrupt verarbeitest:
    Code:
    Spur_1_Flanke = Spur_1 und nicht Flankenmerker_Spur_1
    Spur_2_Flanke = Spur_2 und nicht Flankenmerker_Spur_2
    
    if Spur_1_Flanke then
       Runden_Spur_1 = Runden_Spur_1 +1
    endif
    if Spur_2_Flanke then
       Runden_Spur_2 = Runden_Spur_2 +1
    endif
    
    Flankenmerker_Spur_1 = Spur_1
    Flankenmerker_Spur_2 = Spur_2
    Wenn du die Eingänge per Sorftware entprellen willst, dann würde ich eine kurze Zeit wählen (z.B. 1ms) und zum Entprellen zählen. Den Hilfsmerker verknüpfst du mit dem Eingang für die Spur, mit dem du dann den Rundenzähler erhöhst. (Also z.B. Spur1 und nicht Hilfsmerker1 => Rundenzähler + 1)

    Z.B. so
    Code:
    Hauptschleife:
    
    ...
    ...
    ...
    ...
    ...
    ...
    
    if Spur_1_Flanke then
       Hilfsmerker_Spur_1 = 1
       Entprellung_Spur_1 = 0
    endif
    
    if Hilfsmerker_Spur_1 = 1 then
       if Entprellung_Spur_1 < 50 then
          Entprellung_Spur_1 = Entprellung_Spur_1 + 1
       else
          Hilfsmerker_Spur_1 = 0
       endif
    
    Gleicher Ablauf für Spur 2
    Warte 1ms
    Wenn du Interrupts verwendest, dann musst du den Code, den ich in der Hauptschleife geschrieben habe, in den Interrupt geben.

    Solltest du keinen Interrupt verwenden können, dann musst du den gesamten Teil in die Hauptschleife geben.

    Schöner Aufbau, sehr gut.

    edit: Was mir noch aufgefallen ist, ist die Variable "Blinken..." in Timer 0. Dort schreibst du:
    Code:
    if blinken = 1 then
    blinken = 0
    else
    blinken = 1
    endif
    einfacher wäre:
    Code:
    blinken = nicht blinken
    MfG Hannes
    Geändert von 021aet04 (16.02.2025 um 17:08 Uhr)

Ähnliche Themen

  1. 2-Timerprobleme kann ich nicht lösen(Attiny13 o.ä)
    Von oderlachs im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 9
    Letzter Beitrag: 17.02.2014, 15:05
  2. PCF8574 funktioniert nur nicht beim Lesen, warum?
    Von madangdive im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.01.2010, 11:43
  3. ATtiny44 ADC will nicht
    Von Schokohoernl im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 07.07.2007, 13:51
  4. URXC1 Interrupt beim Atmega 128 funktioniert nicht
    Von tobuc0 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 24.06.2007, 09:23
  5. kann Uref beim Roboterboard V1.2 nicht messen
    Von Marvin im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 2
    Letzter Beitrag: 30.04.2004, 22:43

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress