guten tag an die gemeinde ich hab da ein problem das forum bietet sehr viele infos über c und atmel leider ist c nicht mein ding seit jahren schon basic freak ich würde gerne ein SERVO(modellbau) steuern das ganze mit nem atiny 26 ohne anbauteile also mit 1mhz und das alles mit fastavr geht das überhaupt oder brauch ich dazu minimum 4mhz das servo braucht doch nur einen puls breite 20ms und ne high von 1.ms bi 2ms für 90grad 0,5bis 2,5 für180grad wenn ich das richtig verstehe jetzt der hammer ich hab noch nie einen timer gesetzt oder mit interupts gearbeitet # GRundverständniss die 20ms breite inclusive der high(wert) müssen ja immer anliegen wärend das programm weiterläuft(also unabhängig) ist das der regelfall oder muss ich das extra programmieren hat da jemand ein beispiel für pwm in fastavr danke hilfe wäre echt klasse
wenn du basic fan bist: basecom, ich persönlich mag das net,... über die servos kann ich dir nüx sagen,..
>ich hab noch nie einen timer gesetzt oder mit interupts gearbeitet
mit FastAVR?
Warum hast Du noch nie einen Timer gesetzt oder mit Interrupts
gearbeitet?
geht doch mit FastAVR(zumindest die Versionen für Controller, die NICHT
im erweiterten IO Bereich arbeiten müssen)ziemlich erstklassig.
Die neueren Versionen (4.2 + 4.3) sind eher nicht zu empfehlen, da die
Nutzung des erweiterten IO Bereichs bei FastAVR nur "umschifft" wurde,
statt konsequent NEU aufzusetzen.
Ich habe mich bis dato nur mit dem Empfang von Fernsteuersignalen
auseinander gesetzt (Fahrregler). ein Servo anzusteuern kann ja soo
schwer nicht sein.
Ein konkretes Beispiel habe ich jetzt nicht parat.
Willst Du die Stellgröße über die serielle vom PC vorgeben, sollen es
zwei Tasten sein, oder soll das Servo automatisch hin- und her fahren?
Was ist mit "F1" und "PWM"?
XlR.
Sorry, mit BASIC kann ich auf dem AVR nicht dienen, BASIC nutze ich auf dem PC oder früher dem Plus/4... Aber vielleicht nützt Dir der folgende Link trotzdem, denn da ist die Vorgehensweise beim Umgang mit Timern und Interrupts beschrieben, vielleicht kannst Du es ja in BASIC umsetzen. http://www.hanneslux.de/avr/mobau/7ksend/7ksend02.html Viel Erfolg... ...
Hat zwar nix mit Servos zu tun aber mit der PWM an sich. Ist ein Beispiel für das erste Pollinboard. Die erste LED wird per PWM interruptgesteuert auf und abgedimmt und die andere LED blinkt einfach so vor sich hin. Vielleicht fällt so der Einstieg in PWM/Interrupt leichter. bye Frank $Device= m16 ' used device $Stack = 32 ' stack depth $Clock = 8.0000 ' adjust for used crystal $Timer1=PWM,8,PwmA=Normal ' PWM Modus setzen $Def LED1=PORTD.5 ' Definieren der genutzten Ports $Def LED2=PORTD.6 ' hier fürs Pollinbrett $Def Buzz=PORTD.7 Declare Interrupt Oc1A() ' Der wird hier benutzt Dim a As Byte ' Variable für Zählschleife DDRD=&b11100000 ' Richtung festlegen PORTD=&b00000000 ' interne Pullups setzen (oder nicht) Enable Oc1A ' den deklarierten Interrupt freischalten Enable Interrupts ' und nun Interrupte an sich freischalten Start Timer1 ' damit der Timer auch rennt und interrupten kann Do ' Ab der nächsten Zeile gehts los Toggle led2 ' nur damit im Hauptprogramm was sichtbares passiert For a = 1 To 255 ' LED hochdimmen Pwm1A=a WaitMs 1 Next a For a= 1 To 255 ' LED runterdimmen. Step -1 hat irgendwie nicht funktioniert Pwm1A= 255 - a WaitMs 1 Next a Loop End '///////////////////////////////////////////////////// Interrupt Oc1A(),Save All 'alle Register sichern End Interrupt
ich hab jetzt mal so 4stunden reingehängt es taktet auch schön und das servo rennt mit timer0 bekomme aber nur 20zwischenschritte hin wie kann man das ausrechnen bei 1mhz und nur 8bit timer das man da 255 schritte hinbekommt für 1ms(von 1ms bis 2ms) und dann noch die restzeit bis auf 20ms das geht doch mit 8bit garnicht b oder hat da einer nen tip DANKE
Lothar Sammel wrote: > ich hab jetzt mal so 4stunden reingehängt > > es taktet auch schön > > und das servo rennt mit timer0 > > > bekomme aber nur 20zwischenschritte hin > > wie kann man das ausrechnen bei 1mhz und nur 8bit timer das man da 255 > schritte hinbekommt für 1ms(von 1ms bis 2ms) und dann noch die restzeit > bis auf 20ms das geht doch mit 8bit garnicht b > > oder hat da einer nen tip Du musst die 1 Mhz höher stellen. Timer0 mit 1 Mhz (also kein Vorteiler) laufen lassen. Bei einem Timerstand von 256 (also 0) kriegst du einen Interrupt. D.h. du kriegst alle 0.000256 Sekunden einen Interrupt. Das ist natürlich etwas viel Zeit, da du 1 ms damit nur noch in 4 Teile zerteilen kannst. Selbst wenn du den Timer jeweils vorlädst, sagen wir mal mit 25, hast du immer noch Interrupts im Abstand von 0.025 ms. Das erlaubt dann zwar schon eine Abstufung von 1 / 0.025, also 40 Stellungen und das ist nicht viel. Geh mit der Taktfrequez höher und das Problem löst sich in Luft aus. Um die 20 ms musst du dir keine Sorgen machen. Die sind nicht kritisch. Das setzt natürlich voraus, dass du die Pulserzeugung selber in einem Overflow Interrupt machst. Wenn du mehrere Servos ansteuern willst, hast du aber sowieso keine andere Wahl.
danke für den tip wie ist das mit den frequenzkristallen und den chips mit portund xtal auf einem pin muss ich da fuses setzen oder erkennt der chip das da ein 10mhz crystal da ist in meinem selbstgebauten isp LPT nach isp via 74HC244 kann ich mit bascom keine fuses setzen laut datenblatt sollte das mit sefprogramming 2xkurz power on innerhalb 1sec funzen
> in meinem selbstgebauten isp LPT nach isp via 74HC244 kann ich mit > bascom keine fuses setzen Dann hast du ein Problem. Aber je nachdem wie dieser Programmer aufgebaut ist, kannst du vielleicht ein anderes Brennprogramm nehmen. Obwohl mir das schon etwas seltsam vorkommt, dass du mit dem BASCOM Brenner nicht an die Fuses rankommst. > muss ich da fuses setzen oder erkennt der chip das da ein 10mhz > crystal da ist Du must die fuses setzen. Da führt kein Weg drann vorbei.
Hast Du Dir eigentlich mal den Link angesehen, den ich Dir weiter oben schrieb? Da wirst Du sehen, dass 7 Servoimpulse für einen Mega48 mit 1MHz internem Takt kein Problem sind. Auch wenn Du kein ASM kannst, es ist recht gut beschrieben, wie das Programm arbeitet. Du kannst zumindest den Ablauf (unabhängig von der Programmiersprache) ergründen und es in BASIC umsetzen. Auch mit BASIC kann man direkt auf die I/O-Register zugreifen. Hat der Tiny26 eigentlich einen 16-Bit-Timer? Mit einem 8-Bit Timer muss man da nämlich etwas anders herangehen. Beim Tiny15 mit 1,6MHz verarbeite (und erzeuge) ich Servoimpulse mittels 8-Bit-Timer. Dabei benutze ich Vorteiler 16 und komme auf eine Auflösung von 0,01ms, also auf Zahlenwerte von 100 für 1ms und 200 für 2ms. Das sind 100 Stufen für den normalen Stellbereich des Servos. Einige Beispiele sind ganz dicht bei dem angegebenen Link zu finden. Gibt es eigentlich einen triftigen Grund, das mit einem Tiny26 machen zu wollen? Mit dem Mega48 geht das nämlich ohne Verändern der Fuses, mit Mega8 natürlich auch, aber der ist schon Overkill. ...
....Die neueren Versionen (4.2 + 4.3) sind eher nicht zu empfehlen, da die Nutzung des erweiterten IO Bereichs bei FastAVR nur "umschifft" wurde, statt konsequent NEU aufzusetzen...... ich bin neu im bascom und möchte evtl auf fastavr umsteigen. kannst du deine aussage für die neueren versionen von fastavr mal genau untermauern? mfg
fastavrfan wrote: > ....Die neueren Versionen (4.2 + 4.3) sind eher nicht zu empfehlen, da > die > Nutzung des erweiterten IO Bereichs bei FastAVR nur "umschifft" wurde, > statt konsequent NEU aufzusetzen...... > > > ich bin neu im bascom und möchte evtl auf fastavr umsteigen. > > kannst du deine aussage für die neueren versionen von fastavr mal genau > untermauern? > > mfg nicht mehr... bin auf GCC umgestiegen Axelr. Im Anhang ein Screenshot der Fastavrgroup, wo der Support von Bojan I. zu erreichen ist.
hallo, danke für den hinweiss. habe mal ne bitte, kannst du mal genau die internetadresse angeben, ich komm da nicht hin. "Fastavrgroup". mfg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.