- LiFePO4 Speicher Test         
Ergebnis 1 bis 3 von 3

Thema: Probleme ATtiny13 Timero Reload

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2006
    Beiträge
    11

    Probleme ATtiny13 Timero Reload

    Anzeige

    Praxistest und DIY Projekte
    Hallo, ich habe ein Problem. Bis zum Reloadwert von 170 ist alles ok - Ausgang 0 und 1 werden im Wechsle angesteuert. Ab einem Reloadwert von 180 ist nur noch Ausgang 0 an und das dauernd.

    Ich habe keine Ahnung an was das liegen kann und bitte um Hilfe.

    Klaus Dieter

    ACHTUNG: Da ich gerade experimentiere sind noch ein paar Variablen drin welche im Moment noch nicht benutzt werden! Es geht mit im Moment nur um das Problem mit dem Reload!

    Taktfrequenz: 128kHz

    'PIN 5 Ausgang PB0 = Ansteuerung Transistor T1
    'PIN 6 Ausgang PB1 = Ansteuerung Transistor T2
    'PIN 3 Ausgang PB45 = Ansteuerung LED

    'Schalter rechts oder Links = Dauer

    'Ausgang = PORT
    'Eingang = PIN

    'byte range from 0-255
    'integer range from -32767 - +32768
    'length can be up to 11 characters

    '================================================= =====
    'Einstellungen
    '================================================= =====


    $regfile "attiny13.dat"

    $crystal = 128000

    '$hwstack = 8
    '$swstack = 2
    '$framesize = 5

    $hwstack = 32
    $swstack = 5
    $framesize = 20

    Stop Ac ' AD-Wandler ausschalten
    Stop Adc

    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.4 = Output

    Dim T1toggle As Bit
    Dim T2toggle As Bit

    Const Laden = 170

    Config Timer0 = Timer , Prescale = 1
    On Timer0 Ontimer
    Timer0 = Laden
    Enable Timer0
    Enable Interrupts


    T1 Alias Portb.0
    T2 Alias Portb.1
    Led Alias Portb.4


    Dim Plus As Bit ' AUS
    Dim Minus As Bit ' EIN
    Dim Verzoegerung As Iram Byte
    Dim Aus As Bit ' AUS
    Dim Ein As Bit ' EIN
    Dim Zaehler As Integer

    Plus = 1 ' Zuordnung Aus
    Minus = 0 ' Zuordnung Ein
    Verzoegerung = 115 ' 120 = 3,78Hz, 122 = 3,731Hz, 115 = 3,9062Hz mit dem Oszi ausgezählt also sehr ungenau!
    Aus = 1 ' Zuordnung Aus
    Ein = 0 ' Zuordnung Ein


    T1 = Minus ' Aus mit Minus
    T2 = Plus ' Aus mit Plus

    T1toggle = 0
    T2toggle = 1
    Led = Aus
    Zaehler = 0


    '================================================= =====
    'Hauptprogramm
    '================================================= =====

    Do

    If Zaehler = 1000 Then
    T1toggle = Not T1toggle
    T2toggle = Not T2toggle
    Portb.0 = T1toggle
    Portb.1 = T2toggle
    Zaehler = 0
    End If

    Loop


    '================================================= =====
    ' Interrupt
    '================================================= =====

    Ontimer:
    Timer0 = Laden
    Incr Zaehler
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Hmmm... ohne genau zu wissen was der Code denn genau machen soll, hätte ich eine kleine Idee:
    Wenn Du den Timer auf 180 lädst, bleiben ja "nur" noch etwa 70 Zyklen bis zum nächsten Überlauf. Ein paar Dutzend gehen schon zum Register-Retten beim Interrupt-Einsprung drauf, dann hast Du in der Mainloop ein paar Vergleiche - was ich sagen will ist, dass es das Programm vielleicht verpennt, wenn Zähler gerade genau 1000 ist.

    Probier´s doch mal etwa so:
    Code:
    Do
    
    If 999 < Zaehler Then
    T1toggle = Not T1toggle
    T2toggle = Not T2toggle
    Portb.0 = T1toggle
    Portb.1 = T2toggle
    Zaehler = 0
    End If
    
    Loop
    Ist nur so ´ne Idee...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2006
    Beiträge
    11

    Problem behoben

    Hallo und vielen Dank,

    der Attiny hat die 1000 tatsächlich verpennt. Mit der anderen If Abfrage klappt es.

    Gruß Klaus Dieter

Berechtigungen

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

12V Akku bauen