PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer0 als counter - Input wo?



don_pedro
11.05.2007, 23:38
Hallo,

für die Experten sicherlich eine naive Frage, aber ich fange gerade an und hänge schon fest.

Ich habe eine Gabel-Lichtschranke, die ich an einen Atmega128 anschließen will. Über einen Spannungsteiler habe ich den Ausgang der Lichtschranke so eingestellt, daß 4,5V anliegen, wenn der Lichtstrahl unterbrochen wird. Bei Durchlicht geht der Ausgang auf GRND

Die Konfigurierung des Timers als Counter erscheint mir kein Problem zu sein, dafür gibt es gut dokumentierte BASCOM Files, aber an welchen Port kommt denn das Ausgangskabel der Lichtschranke?

Kann man jeden x-beliebigen Port als Input für den Counter definieren, oder wie geht das?
Oder gibt es definierte Ports für die Counter?
In der mir vorliegenden Dokumentation habe ich nichts gefunden.

Gruß

Peter

Hubert.G
12.05.2007, 08:56
Ich kenne das BASCOM Beispiel nicht, aber es gibt die Pin T1, T2,T3. Das sind Counter Eingänge. Du brauchst nur den entsprechenden Clock-Source auszuwählen.
Hubert

don_pedro
12.05.2007, 10:48
Hallo Hubert,

der Code stammt aus der Bascom-Hilfe


'name : timer0.bas

'copyright : (c) 1995-2005, MCS Electronics

'purpose : shows how to use TIMER0 related statements

'micro : 90S2313

'suited for demo : yes

'commercial addon needed : no

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




$regfile = "2313def.dat" ' specify the used micro

$crystal = 8000000 ' used crystal frequency

$baud = 19200 ' use baud rate

$hwstack = 32 ' default use 32 for the hardware stack

$swstack = 10 ' default use 10 for the SW stack

$framesize = 40 ' default use 40 for the frame space







'First you must configure the timer to operate as a counter or as a timer

'Lets configure it as a COUNTER now

'You must also specify if it will count on a rising or falling edge




Config Timer0 = Counter , Edge = Rising

'Config Timer0 = Counter , Edge = falling

'unremark the line aboven to use timer0 to count on falling edge




'To get/set the value from the timer access the timer/counter register

'lets reset it to 0

Tcnt0 = 0




Do

Print Tcnt0

Loop Until Tcnt0 >= 10

'when 10 pulses are count the loop is exited

'or use the special variable TIMER0

Timer0 = 0

Irgendwo habe ich inzwischen in der BASCOM-Hilfe gefunden, daß PortB.0 als Inpulseingang für Timer/Counter0 konfiguriert werden kann:

The Port B pins with alternate functions are shown in the following table:

When the pins are used for the alternate function the DDRB and PORTB register has to be set according to the alternate function description.

Port B Pins Alternate Functions

PORTB.0 T0 (Timer/Counter 0 external counter input)


Ist der obengenannte Code jetzt alles was man braucht?
Wird PortB.0 damit automatisch als Pulse-Input für den Counter geschaltet?

Gruß

Peter

Hubert.G
12.05.2007, 11:01
Beim Mega128 gibt es keinen T0, es gibt nur T1, T2, T3. Beim Mega16 wäre auf PORTB 0 der T0. Schau mal in dem Beispiel für welchen Prozessor es ist, sonst musst du das anpassen. Mehr ist nicht zu machen.
Hubert

don_pedro
12.05.2007, 21:12
Danke Hubert !

Ich werde jetzt einfach mal die Lichtschranke anschließen, Code hochladen und dann sehe ich ja, ob der Port richtig ist oder nicht.

Gruß

Peter