Forum: Mikrocontroller und Digitale Elektronik servo und fastavr mit atiny26 at 1Mhz


von Lothar S. (magic33)


Lesenswert?

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

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

wenn du basic fan bist: basecom, ich persönlich mag das net,...
über die servos kann ich dir nüx sagen,..

von Axel R. (Gast)


Lesenswert?

>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.

von Hannes L. (hannes)


Lesenswert?

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...

...

von Frank (Gast)


Lesenswert?

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

von Lothar S. (magic33)


Lesenswert?

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



von Karl H. (kbuchegg)


Lesenswert?

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.

von Lothar S. (magic33)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

> 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.


von Hannes L. (hannes)


Lesenswert?

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.

...

von fastavrfan (Gast)


Lesenswert?

....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

von Axel R. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von fastavrfan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.