www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer1 extern takten


Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich einen ATMega 8 mit Bascom dazu bringen, den Timer1 mit nem 
externen Takt hochzuzählen?

Wie muß ich den Timer1 Konfigurieren?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Clock Select" für Timer 1 auf "External Clock" (=> Datenblatt)
Dann den Takt an den entsprechenden Pin anlegen ("T1" heißt der mein 
ich)

Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

mir geht es aber um die Register, wie ich die setzen muß.
Ich probiere jetzt schon sein 4 Stunden und ich kriege den T1 nicht auf 
den Zähler durchgeschaltet.

Wie müssen die Register TCCR1A, TCCR1B gesetzt werden?
Muß ich weitere Register oder Bits setzen?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
=> http://www.atmel.com/dyn/resources/prod_documents/...

TCCR1A = 0;
TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); /* Wert 0x07, 
Extclock, rising edge */
(C-Syntax, weiß nicht wie das in Bascom aussehen muss...)

Würd ich jetzt spontan sagen...

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja: Seite 100 im verlinkten Datasheet

Kann man hier irgendwie editieren?

Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Sebastian,

habe die Register geprüft.
TCCR1A ist 0 gesetzt und TCCR1B ist (dezimal) 7.
Der Simulator zeigt dies an. Trotzdem gehts nicht.

Im Datenblatt (Seite 100) ist die Tabelle mit der 
Clock-Select-Description. Direkt darunder steht noch ein Satz, den ich 
nicht verstehe.

Soll ich den Pin D5 (T1) wirklich als Ausgang schalten? Oder verstehe 
ich das falsch? Da steht Software-Control des Zählers.

Was bedeutet dieser Satz?

Hier mal der Quellcode von mir:
' MCU:         ATmega (noch nicht genau definiert / 8 oder 16 ist pinabhängig)
' Clock:       3,686400MHz



' Beschreibung:
' Frequenz-Zähler


$regfile = "m8def.dat"                                      ' ATMega8
'$regfile = "m16def.dat"                                     ' ATmega16
$Crystal = 3686400                                          ' Takt extern 3,6864MHz
$hwstack = 32
$swstack = 24
$framesize = 24

$baud = 9600

' -----------------------------------------------
' Konstanten und Variablen
' -----------------------------------------------

Dim ZeitBasisCount as Byte
Dim Flags as Byte
Dim Zaehlerstand as Word

LEDRed Alias PortC.2
config LEDRed = output


' -----------------------------------------------
'     Zeitbasis mit Timer2 konfigurieren
' -----------------------------------------------

   on oc2 ISR_Zeitbasis
   enable oc2
   config Timer2 = Counter , Prescale = 256 , Clear Timer = 1
   compare2 = 144 - 1
   start Timer2
   enable interrupts

' -----------------------------------------------
'     Zähler-Eingang mit Timer1 konfigurieren
' -----------------------------------------------

   'on tov1
   'enable tov1
   config Timer1 = counter , Edge = Rising
   tccr1a = 0
   tccr1b = 7
   'portd.5 = 0
   'config portd.5 = output

' -----------------------------------------------

'                 Hauptschleife

' -----------------------------------------------


do
   If Flags.0 = 1 then
      Flags.0 = 0
      toggle LEDRed
      print Zaehlerstand
   end if
Loop

End

' OC2-Interrupt von Timer 2
' wird alle 0,01 Sekunden aufgerufen
ISR_Zeitbasis:
   incr ZeitBasisCount
   if ZeitBasisCount = 50 then
      Zaehlerstand = timer2
      ZeitBasisCount = 0
      Timer2 = 0
      Flags.0 = 1
   end if
Return

Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

vielen Dank für eure Hilfe.
Den Fehler konnte ich jetzt finden.

Es lag nicht an den Registern.
Sondern meine Output-Compare2 Interruptroutine war falsch.

Ich Dödel (ups) muß doch den Timer 1 zurücksetzen und auch diesen 
auslesen!


' OC2-Interrupt von Timer 2
' wird alle 0,01 Sekunden aufgerufen
ISR_Zeitbasis:
   incr ZeitBasisCount
   if ZeitBasisCount = 50 then
      Zaehlerstand = timer2
      ZeitBasisCount = 0
      Timer2 = 0
      Flags.0 = 1
   end if
Return

Jetzt funzt es! :)

Danke an alle!

Gruß Mitch

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.