Hi,
ich glaube dir fehlt ein "Enable Timer1". Oder hab ich jetzt deine Frage falsch verstanden? Dein Timer1 geht net oder?
MfG
edit: ok ich seh grad, das is bei PWM gar net nötig
Hallo,
wie ich schon im Thread zu IMADEIT geschrieben habe, habe ich mit dem Timer/Counter ein Problem.
Timer0 geht, aber Timer1 kriege ich einfach nicht hin.
Mein Code für Timer0:
Wie sähe das jetzt mit Timr1 und Timer0 in einem aus??Code:'########## '# by jon # '########## $regfile = "m32def.dat" $crystal = 1000000 $baud = 2400 Const Ticks = 32 Dim Count As Byte Config Timer0 = Counter , Edge = Rising Load Timer0 , Ticks Set Portb.1 On Timer0 Timer0_isr Config Pinb.0 = Input Enable Timer0 Enable Interrupts Config Pind.5 = Output 'Links Config Pind.4 = Output 'Rechts Config Pinc.5 = Output R_1 Alias Portc.5 Config Pinc.4 = Output R_2 Alias Portc.4 Config Pinc.3 = Output L_1 Alias Portc.3 Config Pinc.2 = Output L_2 Alias Portc.2 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 R_1 = 0 R_2 = 1 Pwm1b = 50 L_1 = 0 L_2 = 1 Pwm1a = 50 Do Print "TCNT0 = " ; Tcnt0 ; Spc(3) ; "Count = " ; Count Waitms 200 Loop End Timer0_isr: Load Timer0 , Ticks Incr Count Return
Würde mich freuen, wenn sich jemand die Mühe macht und mir hilft!
jon
Nice to be back after two years
www.roboterfreak.de
Hi,
ich glaube dir fehlt ein "Enable Timer1". Oder hab ich jetzt deine Frage falsch verstanden? Dein Timer1 geht net oder?
MfG
edit: ok ich seh grad, das is bei PWM gar net nötig
Hallo,
Enable ist nur da um eine Interrupt zu aktivieren.
Es gibt für Timer1 aber keine ISR, also braucht (jetzt) nix aktiviert zu werden.
@Jon,
was soll mit dem Timer0 gemacht werden, der zählt steigende Flanken an PB0, und nach 32 Flanken wird die ISR ausgeführt und eine weitere Variable hochgezählt, und dann, oder wie, was war die Frage ?
Timer1 soll PWM ausgeben, das wäre dann PD4/5, die Richtung mit PC2-5 ?
Aja, bei 10Bit PWM ist 50 noch nicht so recht viel !
Stimmt. Ich sollte beschreiben, um was es geht *g*. Sorry.
Also ich habe an Pinb.1 und Pinb.0 jeweils einen Radencoder Marke Eigenbau.
An Pinb.0 (hab mich im letzten Post verschrieben, werde ich verbessern) habe ich einen Radencoder, der funktioniert auch klasse.
Den anderen habe ich an Pinb.1. Und da habe ich ein Problem mit.
Wie "lese" ich den anderen aus?
Genau.Timer1 soll PWM ausgeben, das wäre dann PD4/5, die Richtung mit PC2-5 ?
Soll erstmal nicht so schnell fahren.Aja, bei 10Bit PWM ist 50 noch nicht so recht viel !
Ich glaube, ich habe mir gerade etwas verstrubbelt (gedanklich).
jon
Nice to be back after two years
www.roboterfreak.de
So wie mit Timer0 kannst Du den PB1 Eingang nicht verwenden, da der Timer1 schon mit PWM belegt ist.
Könntest aber die INT0-2 verwenden und selber zählen, in 'ner ISR.
Bewegt sich bei 50 überhaupt schon was ?
Bullshit.Zitat von linux_80
Kann ich PWM auch Softwaremäßig machen? Wenn ja, wie?
Weil dann könnte ich die Motoren über Software-PWM ansteuern und den Timer1 für den Radencoder verwenden.
Schon belegt *g*Zitat von linux_80
Ich habe gar keinen freien Pin mehr. Kann ich das auch über einen Portexpander machen??
Ganz langsam schon...Zitat von linux_80
jon
Nice to be back after two years
www.roboterfreak.de
Also ich würde den schönen 16Bit Timer1 mit PWM nicht für so popeliges zählen verschwenden, vor allem wenn PWM gebraucht wird [-X
Kannst Du nicht den ein oder andern Draht tauschen, damit Du auf einen INTx-Pin kommst ?
Ansonsten wäre da noch der Timer2 übrig, kannst du ja mal ausrechnen ob Du mit dessen 8Bit breite eine gescheite PWM Auflösung hinbekommst.
Geht bestimmt, aber alles per Hand zählen, und das gleich 2mal.
Schau mal beim Servo-Befehl, so in der Richtung geht das dann hier auch, nur der Servo-Befehl selber geht nicht, weil mit dem keine 100% erreicht werden können. Sondern nur etwa 0-10%.
Kann ich mal nachschauen. Mir fehlt nur für IMADEIT eine ordentliche Doku, in der notiert ist, wohin welcher Pin führt *g*. Sollte ich mal machenZitat von linux_80
Den Rest verstehe ich nicht so ganz. Meinst du das in etwas so?:
Den Timer2 soll ich für die Motoren verwenden? Oder für den Radencoder?
Was meinst du damit?Geht bestimmt, aber alles per Hand zählen, und das gleich 2mal.
Und was soll mir bei meinem Problem der Servo-Befehl helfen?
Sorry, aber ich habe heute irgendwie ein paar Probleme beim denken. Das kommt davon, wenn man sich nicht in der Schule warmdenkt.
jon
Nice to be back after two years
www.roboterfreak.de
Ich meinte mit Timer2, wenn Du den Timer1 für das zählen verwenden willst, bleibt nur der Timer2 übrig um damit ein PWM hinzubekommen.
Der hat aber nur einen OC-Ausgang, Du verwendest aber scheinbar 2 Motoren, weshalb der Timer2 nicht direkt als PWM-Erzeuger verwendet werden kann.
Deshalb könnte man den Timer2 so einstellen wie das beim Servo-Befehl auch gemacht wird, ca. alle 10µs das PWM-Signal updaten, dH., der Timer muss alle 10µs einen IRQ auslösen, in dessen ISR dann das PWM-Signal auf einen Ausgang gelegt wird, und entsprechend irgendwelchen Variablen gesetzt oder gelöscht wird. Ob 10µs reichen weiss ich aber auch nicht.
Ich werde morgen mal den Bot auseinander nehmen und schauen, ob ich irgendetwas umlegen kann, sodass ich einen INTx frei habe.
Ich blicke bei den Sachen mit ISR, ISQ usw. irgendwie nie so ganz durch.
jon
Nice to be back after two years
www.roboterfreak.de
Lesezeichen