www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Counter und schwer von Begriff


Autor: Marc Vollmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich teste gerade mit AVRStudio den Simulator für den ATMega16.

Ich möchte gerne den Counter 0 verwenden. Dieser soll die Impulse am
Eingang PortB Pin0 zählen (PB0).

Soweit ich das Manual verstanden habe, sollte TCCRO mit 0x00 als
Counter im "Normal Mode" funktionieren.

Also folglich toggle ich PB0 softwaremäßig, aber der Zähler zählt
nicht:

.include "m16def.inc"
.def null = r16
.def temp = r17

; Initialisierung vom Counter0
  ldi NULL,0x00
  out TCCR0,NULL
  out TCNT0,NULL
  ldi temp,0x00
  out TCCR0,temp

loop:
  ldi temp,0x00
  out portb,temp
  ldi temp,0x01
  out portb,temp
  rjmp loop

Geht das nicht im Simulator, oder ist die Initialisierung vom Counter 0
einfach Quatsch???

Der ATMega16 hat doch 3 Timer/Counter:

Eingang für den Counter 0 -> T0 auf PB0
Eingang für den Counter 1 -> T1 auf PB1

Kann mir einer sagen, wo der Eingang für Counter 2 ist, sprich T2?

Schon mal Danke
Gruss
Marc

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auf jeden Fall ist die Initialisierung von TCCR0 falsch, schreibst du da
"0" rein, bleibt der Zähler stehen. Für externes Zählen muss 0x06
(falling edge) oder 0x07 (rising edge) da stehen.
Ob das überhaupt klappt, wenn du den Pin per Software toggelst, kann
ich dir so nicht sagen (macht auch keinen Sinn, kannst ja gleich einen
reinen Softwarezähler nehmen).

Autor: Marc Vollmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe die Initialisierung von TCCR0 mit 0x06 schon ausprobiert,
funktioniert aber auch nicht.

Mit dem Toggeln per Software ist nur ein Test, daß Ganze dient später
dazu Inkremente von einem Reflexkoppler aufzunehmen und anschließend
eine Regelung für eine Positionierung durchzuführen. Da für mich
ziemlich viel Neuland dabei ist, wollte ich es eben mal simulieren.

Eventuell muß ich dann eben auch den Counter simulieren...

Gruss
Marc

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also vom Portschaltbild her sollte es funktionieren, da der
entsprechende Zählereingang direkt am Pin liegt, sollte dem Zähler also
wurscht sein, ob der Pin von "innen" oder von "aussen" getoggelt
wird. Du hast aber vergessen, den Port auch als Ausgang zu schalten
(sbi DDRx.x), mit deinem Programm erscheinen die Ausgaben nicht am Pin.

Autor: Marc Vollmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war es, nachfolgendes Programm funktioniert auch im Simulator. Wenn
man allerdings den PB0 als Eingang schaltet (so wird es später mal
gebraucht), dann läuft der Counter nicht hoch -- ist aber irgendwie
logisch.

Danke crazy horse.

Gruss
Marc

--
.include "m16def.inc"
.def null = r16
.def temp = r17

  ; Initialisierung vom Counter0
  ldi NULL,0x00
  out TCCR0,NULL
  out TCNT0,NULL
  ldi temp,0x06
  out TCCR0,temp

  ; Initialisierung des PB0 als Ausgang
  ldi temp, 0x01
  out DDRB, temp

loop:
  ldi temp,0x00
  out portb,temp
  ldi temp,0x01
  out portb,temp
  rjmp loop

Autor: Marc Vollmer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, jetzt funktioniert es auch als Eingang !!! Der Unterschied liegt
darin, daß nicht der PortB getoggelt wird, sondern der PinB.

Nochmal die Änderung, dann ist aber gut...

.include "m16def.inc"
.def null = r16
.def temp = r17

  ; Initialisierung vom Counter0
  ldi NULL,0x00
  out TCCR0,NULL
  out TCNT0,NULL
  ldi temp,0x06
  out TCCR0,temp

  ; Initialisierung des PB0 als Eingang
  ldi temp, 0x00
  out DDRB, temp

loop:
  ldi temp,0x00
  out pinb,temp
  ldi temp,0x01
  out pinb,temp
  rjmp loop

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.