- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 3 von 3

Thema: Tiny24 tcnt1h

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126

    Tiny24 tcnt1h

    Anzeige

    E-Bike
    Hallo allerseits!

    Ich werd nicht schlau ...

    Während einer ca. 5 Minuten Pause möchte ich eine LED langsam blinken lassen
    um anzuzeigen, dass der Timer1 läuft - das Programm also im Pausenmodus ist.
    T1 an sich läuft tadellos, tut was er soll ...

    Allerdings kann ich folgendes Problem nicht lösen:
    Ich lese TCNT1H in ein Register und möchte ein bestimmtes Bit zum Blinken auswerten.
    Nur blinkt da nichts!
    Bei TCNT1L funktioniert es einwandfrei, nur bei TCNT1H nicht!!
    Wo liegt hier der Hund begraben?

    Nachstehendes Progrämmchen dient nur zum Testen ...
    Alle paar Sekunden wechselt die Anzeige zwischen TCNT1L und TCNT1H.
    Beide werden in R16 eingelesen.

    Gruß Heinz

    ps: PA2 wegen einer existierenden Platine für T24 zum Testen, sonst egal.

    ;---------------------------------------------------------
    #include "tn24def.inc"
    .cseg
    .org $0000
    rjmp INIT
    .org $0008
    rjmp T1OVF
    ;---------------------------------------------------------
    INIT:
    ldi R16,LOW(RAMEND)
    out SPL,R16
    ldi R16,$0F ;all out
    out DDRA,R16
    ldi R16,1
    out TIMSK1,R16 ;T1 Ovf enable
    clr R16
    out TCNT1H,R16
    out TCNT1L,R16
    ldi R16,4 ;Prescaler /256
    out TCCR1B,R16 ;start T1
    sei
    ;-------------
    LOOPL:
    sbrc R17,0
    rjmp looph
    in R16,TCNT1L ;hier funktioniert jedes Bit
    sbrs R16,7 ;in diesem Fall nur Bit7, damit
    cbi PORTA,2 ;man das Blinken gut erkennen kann
    sbrc R16,7
    sbi PORTA,2
    rjmp loopl
    LOOPH:
    sbrs R17,0
    rjmp loopl
    in R16,TCNT1H ;hier blinkt's nie
    sbrs R16,2 ;egal welches Bit abgefragt wird
    cbi PORTA,2
    sbrc R16,2
    sbi PORTA,2
    rjmp looph
    ;-----------------------------------------------------
    T1OVF:
    in R20,SREG
    sbrc R17,0 ;skip if Bit0 off
    rjmp clrb0
    sbr R17,1
    rjmp t1end
    CLRB0:
    cbr R17,1
    T1END:
    out SREG,R20
    reti
    ;-----------------------------------------------------
    .EXIT
    Geändert von HeSt (30.11.2020 um 15:15 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von HeSt Beitrag anzeigen
    Wo liegt hier der Hund begraben?
    Code:
    ...
        rjmp    loopl
        in    R16,TCNT1L
        in    R16,TCNT1H    ;hier blinkt's nie
        sbrs    R16,2        ;egal welches Bit abgefragt wird
    ...
    Hallo,

    möglicherweise am fehlenden Auslesen des TCNT1L Registers. Das triggert erst das AVR-interne Übertragen des TCNT1H Registers. Näheres findet man im Datenblatt zum entsprechenden AVR (Um welchen geht es denn eigentlich) bei "Accessing 16-Bit registers" im Timer1 Kapitel.

    Ich habe das mal grün markiert, wo ich meine, daß es da hin muß.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Zitat Zitat von Searcher Beitrag anzeigen
    möglicherweise am fehlenden Auslesen des TCNT1L Registers.
    Hi Searcher,

    BINGO!

    Das ist es! Kam leider auch nicht auf die Idee nachzulesen, weil ich bislang keine speziellen Anwendungen mit 16Bit-Timern programmiert hab und mit den bisherigen Anwendungen keine Probleme hatte.
    Wieder was dazu gelernt!
    DANKE!!!

    14.3
    Accessing 16-bit Registers
    To do a 16-bit write, the high byte must be written before the low byte. For a 16-bit read, the low byte must be read before the high byte.

    Übrigens, es handelt sich um einen ATTiny24. Ich war zu schnell beim Thema. Kann leider T24 nicht mehr auf Tiny24 ändern.

    Gruß Heinz

Ähnliche Themen

  1. PWM Tiny24
    Von walterk im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 27.12.2012, 18:53
  2. Stromverbrauch Tiny24 und RF12 Sleep Mode
    Von izaseba im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 13.02.2008, 20:49
  3. Tiny24/44/84 ISP - Welcher Pin ist SCK?
    Von OnkelTobi im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 06.09.2006, 01:00

Berechtigungen

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

Labornetzteil AliExpress