Hallo
Ich brauche fuer ein kleines Projekt einen Nadelimpuls mit bei einer
Frequent einmal 100Hz und einmal 233Hz.
Ich dachte mir das dies am einfachsten mit einem µC gehen wird. Dazu
habe ich irgendwo im Web ein Programm gefunden, mit dem ich etwas
gespielt habe. Grundsaetzlich funktioniert es auch aber wie rechne ich
Quarz und Prescaper so zusammen das ich auf 100Hz bzw. 233Hz komme ?
beides brauche ich nicht, dass wird mir zu kompliziert. Ich flashe dann
lieber zwei ATMega8 mit jeweils einer Frequenz.
Das Programm im Anhang.
Danke fuer Eure Muehe, auch wenn ihr nur mal rein seht.
1
$regfile = "m8def.dat"
2
$crystal = 4000000
3
4
Config Portb.1 = Output
5
6
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64
@ UserMitKleinemProblemchen (Gast)
>Ich brauche fuer ein kleines Projekt einen Nadelimpuls mit bei einer>Frequent einmal 100Hz und einmal 233Hz.
Wie breit soll denn der Nadelimpuls sein? 1ns? 1ms?
>Ich dachte mir das dies am einfachsten mit einem µC gehen wird.
Muss nicht sein. Ein einfacher RC-Taktgeber + RC-Hochpass macht auch
prima Nadelimpulse.
>gespielt habe. Grundsaetzlich funktioniert es auch aber wie rechne ich>Quarz und Prescaper so zusammen das ich auf 100Hz bzw. 233Hz komme ?>beides brauche ich nicht, dass wird mir zu kompliziert. Ich flashe dann>lieber zwei ATMega8 mit jeweils einer Frequenz.
O mein Gott. Soviel Dummheit und Ignoranz tut ja weh. Schon mal was von
den Grundrechenarten gehört?
Falk Brunner schrieb:> Wie breit soll denn der Nadelimpuls sein? 1ns? 1ms?
Das brauche ich nicht so eng sehen, kurze Spitzen reichen und das kann
ich ja ueber Compare1a = xxx ziemlich klein stellen.
> Muss nicht sein. Ein einfacher RC-Taktgeber + RC-Hochpass macht auch> prima Nadelimpulse.
Mag sein aber die AVRs habe ich gerade da und im Prinzip geht es ja
schon, nur das die Frequenz nicht stimmt.
> O mein Gott. Soviel Dummheit und Ignoranz tut ja weh. Schon mal was von> den Grundrechenarten gehört?
Noch keinen Kaffee gehabt ? Rumgemotze brauche ich nicht, Hilfe waere
mir lieber.
Wenn ich wuesste was ich wo rechnen sollte, dann haette ich nicht
gefragt. Ich habe keine Ahnung vom Programmieren.
UserMitKleinemProblemchen schrieb:> Noch keinen Kaffee gehabt ? Rumgemotze brauche ich nicht, Hilfe waere> mir lieber.> Wenn ich wuesste was ich wo rechnen sollte, dann haette ich nicht> gefragt. Ich habe keine Ahnung vom Programmieren.
dann lern es :P
mal ganz im ernst, du musst dich da erstmal reinlesen in das ganze.. und
vor allem genau beschreiben was du willst.
ein impuls und eine frequenz passen vom sinn her nicht zusammen...
solltest du ein periodisches signal mit einer bestimmten frequenz haben
wollen so musst du den prescaler soweit anpassen, dass du in den
gewünschten bereich einkommst (nimm am besten gleich einen 16bit
timer..). dann musst du das Timer register vorladen um so deine
gewünschte frequenz mit puls/pause verhältnis genau zu erreichen
So kompliziert baucht das doch garnicht zu sein.
Ich brauche einmal ein Programm fuer 233Hz und einmal fuer 100. Das
zusammenzufassen und auf zwei pins auszugeben geht bestimmt, kann ich
aber nicht, brauche ich auch nicht.
Es geht doch ueber die Zeile...
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 64
...und dem Quarz, recht gut, nur bin ich in der Frequenz etwas zu hoch.
Ich moechte doch nur wissen wie ich ueber die Parameter Quarz, PWM
(timer) und Prescale auf 100 bzw 233Hz komme. Da muss es doch
irgendeinen Rechenweg geben.
Das Tastverhaeltnis (compare) interessiert mich erst mal ueberhaupt
nicht.
UserMitKleinemProblemchen schrieb:> Ich moechte doch nur wissen wie ich ueber die Parameter Quarz, PWM> (timer) und Prescale auf 100 bzw 233Hz komme. Da muss es doch> irgendeinen Rechenweg geben.> Das Tastverhaeltnis (compare) interessiert mich erst mal ueberhaupt> nicht.
PWM_Frequenz = Quarz_Frequenz/Prescaler/Timer_Auflösung
wie du siehst kommst du damit sogut wie nie auf die gewünschte frequenz
;) daher => timer vorladen
Hi
>Ich moechte doch nur wissen wie ich ueber die Parameter Quarz, PWM>(timer) und Prescale auf 100 bzw 233Hz komme. Da muss es doch>irgendeinen Rechenweg geben.
Ja. Steht lang und breit im Datenblatt.
MfG Spess
Andi D. schrieb:> daher => timer vorladen
Ich sehe schon, dass ist komplizierter als ich dachte. Suche ich nach
"Timer vorladen" finde ich Programmierkurse.
Da nehme ich dann doch lieber den guten alten NE555
Danke fuer den Hilfeversuch.
Hi
>wie du siehst kommst du damit sogut wie nie auf die gewünschte frequenz>;) daher => timer vorladen
Erzähle nicht so einen Müll. Bei AVRs geht das ohne Vorladen.
Die o.g. Frequenzen lassen sich z.B. mit einem 16Bit-Timer und 4MHz mit
0% bzw. 0.002% Abweichung erzeugen.
MfG Spess
Hi
Datenblatt:
16-bit Timer/Counter1->Modes of Operation->Fast PWM Mode
Und schon hast du die Formel.
In den Timermodes 14 und 15 kannst du mit ICR1 bzw. OCR1A den Top-Wert
des Zähler und damit die Frequenz einstellen. Mit den Top-werten von
$270E bzw. $10C2 (bei 4MHz und Prescaler 8) bekommst du deine
Frequenzen. Mit OCR1A oder OCR1B lässt sich die Pulsbreite einstellen
(minimal 2µs).
MfG Spess
@ UserMitKleinemProblemchen (Gast)
>So kompliziert baucht das doch garnicht zu sein.
Ist es auch nicht.
>Ich brauche einmal ein Programm fuer 233Hz und einmal fuer 100.
Warum zwei? Das kann man locker in eins packen und per Taster
umschalten.
>Ich moechte doch nur wissen wie ich ueber die Parameter Quarz, PWM>(timer) und Prescale auf 100 bzw 233Hz komme. Da muss es doch>irgendeinen Rechenweg geben.
Ja, siehe das Posting von Andi.
4 MHz / 100 Hz = 40.000
4 MHz / 233 Hz = 17.167
>Das Tastverhaeltnis (compare) interessiert mich erst mal ueberhaupt>nicht.
Doch, denn das macht dann deine Pulsbreite.
Ach ja, da ist mal wieder das schöne Vorurteile über BASCOM-User.
Handbuch lesen Fehlanzeige. ;-) Ok, CTC wird von BASCOM nicht direkt
unterstützt. Hmmm. Ich würde das mal so machen. Siehe Anhang. Ist aber
nicht getestet, hab keinen ATmega8.
MfG
Falk
Falk Brunner schrieb:> Warum zwei? Das kann man locker in eins packen und per Taster> umschalten.
Sicher, wenn man es kann. Ich kann es nicht, dass ist ja gerade mein
Dilemma.
> Ja, siehe das Posting von Andi.
Das Posting von Andi habe ich ja noch halbwegs verstanden nur komme ich
dann nie auf 100Hz oder 233Hz. Weil eben der prescaler "feste" Werte
haben muss. Das hatte ich mir einfacher vorgestellt.
> 4 MHz / 100 Hz = 40.000> 4 MHz / 233 Hz = 17.167
Hmmm ja.
>>Das Tastverhaeltnis (compare) interessiert mich erst mal ueberhaupt>>nicht.>> Doch, denn das macht dann deine Pulsbreite.
Ich will das jetzt nicht unnoetig ausbreiten, aber was hat die
Pulsbreite mit der Frequenz zu tun ? Die frequenz bleibt doch immer
gleich, nur duty cycle aendert sich doch. Wenn es eine Sache der
Progammierung ist, verstehe ich das sowieso nicht.
> Ach ja, da ist mal wieder das schöne Vorurteile über BASCOM-User.> Handbuch lesen Fehlanzeige. ;-)
Das mag sein, aber ich programmiere nicht, habe also auch kein Handbuch.
Als ich nach PWM gesucht hatte, kam gleich AVR Hardware PWM, was sich ja
super einfach anhoert. Also habe ich mal nach Programmen dazu gesucht
und habe obiges gefunden. Das es jetzt Basic ist, war Zufall. Aber C
oder asm haette ich wohl noch weniger verstanden, haette es aber auch
irgendwie getan.
Dein Programm funktioniert leider nicht. Die Schleife laeuft in der
Simulation, aber es kommt kein Signal.
Was Du da oben jetzt gemacht hast ist doch jetzt keine Hardware PWM
mehr, oder ?
@ UserMitKleinemProblemchen (Gast)
>Das Posting von Andi habe ich ja noch halbwegs verstanden nur komme ich>dann nie auf 100Hz oder 233Hz. Weil eben der prescaler "feste" Werte>haben muss. Das hatte ich mir einfacher vorgestellt.
Der Prescaler ist auch Nebensache und wird hier sowieso nicht gebraucht.
Der Trick heisst CTC, damit kann man beliebige Periodendauern erzeugen.
>Als ich nach PWM gesucht hatte, kam gleich AVR Hardware PWM, was sich ja>super einfach anhoert.
Ist es auch, aber minimale Kenntnisse werden dennoch benötigt.
>Dein Programm funktioniert leider nicht. Die Schleife laeuft in der>Simulation, aber es kommt kein Signal.
Und was passiert im REALEN AVR? Wie misst du das?
>Was Du da oben jetzt gemacht hast ist doch jetzt keine Hardware PWM>mehr, oder ?
Doch, das ist Hardware-PWM.
Ich kann im den Programm keinen Fehler finden, sind ja nur zwei
Register, welche beschrieben werden müssen, um Timer 1 zu konfigurieren.
Nur ist das Signal an PB1 invertiert, sprich es ist meist HIGH und nur
kurze LOW-Pulse. Willst du das anders herum haben, musst du statt dessen
diesen Wert nehmen
Tccr1a = &B10000000
MFG
Falk
Falk Brunner schrieb:> Und was passiert im REALEN AVR? Wie misst du das?
Ich habe das natuerlich geflasht und ausprobiert, aber das Oszi stellt
sich strur und zeigt nichts an.
Danach habe ich in diesem Bascom Simulator mal geguckt was sich
ueberhaupt tut. Dort laeuft das Programm wie es soll durch und bleibt
dann in der Schleife.
@ UserMitKleinemProblemchen (Gast)
>> Und was passiert im REALEN AVR? Wie misst du das?>Ich habe das natuerlich geflasht und ausprobiert, aber das Oszi stellt>sich strur und zeigt nichts an.
Kann eine falsche Einstellung sein, Stichwort Trigger. Schliesslich ist
der Nadelimpuls SEHR schmal, gerade mal 5 Takte, macht ~1us.
Ändere mal die Zeile
Compare1a = 5000
Dann sollte man was sehen, auch ohne gescheiten Trigger.
MfG
Falk
Falk Brunner schrieb:> Siehe Anhang. Ist aber> nicht getestet, hab keinen ATmega8.
Ich habe noch genuegend andere AVRs da. ATMega 8 88 16 32 644
ATTiny 2313 90S2313, falls Du selbst mal testen willst oder diese
einfacher zu programmieren sind.
Es ist auch kein Thema das in C zu machen. Dafuer gibt es jedenfalls
deutlich bessere Anleitungen im Web. Nur muss ich dazu erst mal wissen
nach was ich gucken soll. Jetzt erstmal eine Programmiersparache zu
lernen nur im ein Signal zu erzeugen, ist mir zu uebel, dass wird wohl
jeder verstehen. Aber mal gucken was noch kommt, evtl. zu einem anderen
Projekt.
Okay, auf 5000 geaendert, nichts, eine saubere gerade Linie. Mit dem
Oszi kann ich ganz gut umgehen, glaube nicht das ich da noch solche
Fehler mache. Ausserdem hat es eine Auto-Funktion, da sucht es die
passenden Einstellungen. Klappt auch zu 80%.
Fuses bin ich mir auch ziemlich sicher. Das andere Programm oben geht
nach wie vor.
Ich habe damit jetzt mal was rumgespielt. Statt ein PWM habe ich einen
5V Offset. Egal was ich im compare1a einstelle.
Dann habe ich den Schalterkram mal rausgenommen. Muesste doch so auch
funktionieren ? Macht aber rein garnichts.
@Falk
Super, geht. Zumindest die 100Hz. Sogar fast genau. 99,9994Hz
Die Umschaltung will nicht, dass kann aber jetzt auf die Schnelle auch
an mir gelegen haben. Aber das will ich jetzt auch selbst raus bekommen.
Jedenfalls ein recht herzliches DANKE SCHOEN fuer Deine Muehe und
Ausdauer !
@Andreas K.
Jetzt weiss ich das auch und wuerde es nicht nochmal machen. In der Zeit
haette ich das 5x diskret aufgebaut. Aber wenn man im Web mal nachliest
"PWM mit µC ist ja 'so' einfach" Ja sieht man wie einfach das ist.
Der Vorteil ist aber jetzt, ich kann dieses Programm beliebig erweitern,
abaendern oder loeschen und was anderes auf den AVR flashen und habe
null Verluste.
Deswegen drucken auch gerade die beiden Tutorials von hier, die ich mir
sicherlich mal ansehen werde. Was kommt weiss ich nicht, sehen wi aber.
Vielen Dank an alle.
@ UserMitKleinemProblemchen (Gast)
>Die Umschaltung will nicht, dass kann aber jetzt auf die Schnelle auch>an mir gelegen haben. Aber das will ich jetzt auch selbst raus bekommen.
Der Taster an PB0 muss nach Masse schalten.