Hallo, ich möchte mit dem Attiny 13 die Programmierung in Bascom erlernen und habe mir als erstes ein Lauflicht ausgesucht. Dies ging prima und nun sollte ein Servotester folgen. Hierzu wollte ich den Befehl pulseout benutzen. Im Internet habe ich dann unter anderem den Mittelwert für das Servo (1,5ms) für den Pulseout-Befehl (Einheit in Mikrosekunden)gefunden. Aber das Servo läuft hier in meinem Beispiel leider nicht in die Mitte: $regfile = "attiny13.dat" $crystal = 1200000 $hwstack = 24 $swstack = 10 $framesize = 20 Config Portb.0 = Output Dim A As Word Do For A = 1 To 1000 Pulseout Portb , 0 , 1500 'entspricht 1,5 ms Waitms 20 Next Loop End Bei einem Wert von ca 300-330 fährt das Servo in die Mitte. Was mache ich hier falsch ? Danke für Eure Unterstützung
Hi, Pulseout ist abhängig von der genutzten Taktfrequenz. Ich nutze auch 12 mhz und mitte ist bei mir bei ca. 4500. Gruß Kay
Seid ihr sicher, daß euer Tiny13 mit 12MHz läuft? Das geht nur mit einem externen Quarz bzw. Takt. Die $crystal Einstellung muß mit dem tatsächlichen Systemtakt übereinstimmen.
Es hat niemand etwas von einem internen quarz geschrieben. Ich für meinen Teil nutze einen externen takt. Kay
Der Tiny13 hat nur einen 8-Bit-Timer. Will man den Impulsbreitenbereich von Servoimpulsen damit darstellen, bietet sich eine Taktfrequenz von 4,8 MHz und Vorteiler 1:64 für den Timer an. Damit hat 1 ms den Zahlenwert 75 und 2 ms den Zahlenwert 150. Will man höhere Auflösung, so sollte man einen MC mit 16-Bit-Timer verwenden, z.B. einen Tiny2313 oder Mega48. Die Bascom-Spezialbefehle sehen zwar cool aus, können aber fehlende Hardware auch nicht ersetzen. ...
Hallo, da ich noch ein Anfänger bin, sind mir viele Dinge noch unklar. Für den Servotester benutze ich keinen Quarz. Meine Frage ist nun: Wie muss ich den Wert für "chrystal" definieren, damit ich den Pulseout-Befehl so benutzen kann, wie er im Befehlssatz von BASCOM enthalten ist ? z.B.: pulseout 0, 1500 würde ja an Pin0 des PortB den Puls mit der eben definierten Länge am ATTIny 13 ausgeben. Mit welcher Taktfrequensz arbeitet denn der ATTiny 13 , wenn er ohne Quarz beschaltet ist und der Parameter "Chrystal" nicht im Programm benutzt wird ? Danke für Eure Unterstützung Gruß Peter
Peter Born schrieb: > Wie muss ich den Wert für "chrystal" definieren, damit ich den > Pulseout-Befehl so benutzen kann, wie er im Befehlssatz von BASCOM > enthalten ist ? Schon mal in die Hilfe von Bascom geguckt? Da sollten die beiden Begriffe näher beschrieben sein.
Peter Born schrieb: > Mit welcher Taktfrequensz arbeitet denn der ATTiny 13 , wenn er ohne > Quarz beschaltet ist und der Parameter "Chrystal" nicht im Programm > benutzt wird ? Der Parameter "Chrystal" muß im Programm immer angegeben werden, damit das Programm weiß, mit welchem Takt der µC arbeitet. Die Frequenz mit der der µC arbeitet hängt von der von dir verwendeten Taktquelle ab. Im Datenblatt im Abschnitt 6.2 Clock Sources ist das genau beschrieben. Was Bascom davon verwendet, sollte im Bascom Manual stehen. Da du aber schon Erfahrungswerte hast (Chrystal-Wert, Pulsdauer), kannst du von da aus auch per Dreisatz auf den tatsächlich verwendeten Takt und Vorteiler zurückschließen und das mit den genauen Werten aus dem Datenblatt zur Deckung bringen.
Hallo Peter Born, warum nimmst du nicht den Befehl von Bascom für Servos? Der wäre "Servo(1) = <dein wert>" Bei der 1 kannst du durchnummerieren falls dass es mehrere Servos an einem AVR sind. MfG 1234
STK500-Besitzer schrieb: > Schon mal in die Hilfe von Bascom geguckt? > Da sollten die beiden Begriffe näher beschrieben sein. Recht hatter... Aber trotzdem: Peter Born schrieb: > Wie muss ich den Wert für "chrystal" definieren, damit ich den > Pulseout-Befehl so benutzen kann, wie er im Befehlssatz von BASCOM > enthalten ist ? Du musst den Wert angeben, mit der die CPU Deines Tiny13 taktet. > z.B.: pulseout 0, 1500 würde ja an Pin0 des PortB den Puls mit der eben > definierten Länge am ATTIny 13 ausgeben. Ich würde mich nicht darauf verlassen, dass das (zufriedenstellend) klappt, denn die Hardware-Ausstattung des Tiny13 ist nicht gerade üppig. Ohne 16-Bit-Timer sind Zahlenwerte über 255 für Zeitintervalle entweder Plazebo oder es wird etwas komplizierter. Du kannst also davon ausgehen, dass die angegebenen 1500 (µs) auf einen Wert skaliert werden, der mit dem 8-Bit-Timer abbildbar ist. Und dazu solltest Du Dir mal (im Datenblatt des AVRs) ansehen, welche Taktfrequenzen und Timer-Vorteiler zur Verfügung stehen und wie lange eine "Timer-Runde" mit welchen Kombinationen dieser Beiden dauert. Du musst mit dem Timer Zeitintervalle von 700 µs bis 2300 µs abbilden können, eine Timer-Runde sollte (mit etwas Reserve) also mindestens 2500 µs dauern. Dauert sie viel länger, verschenkt man Auflösung, ist sie kürzer als 2300 µs, dann gibt es Überläufe. Ich weiß zwar nicht genau, wie PulseOut (auf ASM-Ebene) arbeitet, aber Bascom kann auch nur die vorhandene Hardware nutzen und ist bei kleinen Programmen auch noch recht verschwenderisch mit den Ressourcen. Auf dem kleinen Tiny13 würde ich da nicht allzuviel erwarten. > > Mit welcher Taktfrequensz arbeitet denn der ATTiny 13 , wenn er ohne > Quarz beschaltet ist Ein erster Blick ins Datenblatt hätte Dir gesagt, dass der interne RC-Oszillator in Werkseinstellung mit 9,6 MHz klappert und der Systemtaktvorteiler auf 1:8 voreingestellt ist, was dann eine Taktfrequenz von 1,2 MHz ergibt. Ein zweiter Blick ins Datenblatt zeigt Dir dann auch, dass Du aus dem Programm heraus den Systemtakt-Vorteiler (CLKPR) selbst ändern kannst. > und der Parameter "Chrystal" nicht im Programm > benutzt wird ? Der AVR erfährt nix vom Parameter "Chrystal". Dieser Parameter wird von Bascom benutzt, um Warteschleifen (waitxy), Baudraten und andere Dinge (vermutlich auch pulseout) an die real vorhandene Taktfrequenz anzupassen bzw. einzustellen. Den Takt des AVRs änderst Du mit diesem Parameter aber nicht. ...
Ja natürlich habe ich schon die Bascom-Hilfe benutzt. Nur steht ja nichts außer, dass die Einheit von Pulseout in Mikrosekunden anzugeben ist bei einem 4MHz- Quarz-Takt. Aber leider nichts zu einem internen Takt. Meiner Meinung kann es doch nicht sein, dass die Mittelstellung am Servo kontolliert werden muss ( mit dem Auge ermitteln) und ich den Wert bei Pulseout dann anpasse, bis es stimmt. Das ist für mich nicht logisch. Genauso ist es mir nicht verständlich: Benutze ich den Befehl waitms 1000, dann ist die Zeit unterschiedlich bei verschiedenen Werten für "chrystal". Aber ich lerne ja noch . . . . Gruß Peter
An 1234: warum nimmst du nicht den Befehl von Bascom für Servos? Der wäre "Servo(1) = <dein wert>" Bei der 1 kannst du durchnummerieren falls dass es mehrere Servos an einem AVR sind. Den Befehl kenne ich nicht in Bascom, meine Version lautet: 2.0.7.1 Gruß Peter
Hallo, Peter, ich hatte gestern das selbe Problem mit einem Atmega 32. Die richtige Taktung des Controller ist wichtig. Der Servobefehl samt Interrupts geht anscheinend nicht bei einer internen Taktung von 1Mhz. Zumindest hängte mein Atmega sich auf. Somit habe ich den Pulseout Befehl genommen. Mittelwert des Servos liegt bei mir (Taktung intern 1Mhz) irgendwo zwischen 250 und 620. Hab ein ganz billiges Servo genommen um den Linksanschlag und Rechtsanschlag herauszufinden, nur nicht überdrehen, das Getriebe danks dir sonst. zb. Servowert = 410 Pulseout Porta , 4 , Servowert 'An Porta.4 hängt die Steuerleitung. Hoffe ich konnte dir etwas helfen. Ansonst melde dich einfach, ich kann dir meinen Code schicken. Gruß Rainer.
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.