Ich habe ein Bascom Programm von einem Atmega8 auf einen Attiny13 "kopiert", mit minimalen Änderungen. Es läuft soweit, nur die PWM wo vorher 19 kHz hatte, hat jetzt nur noch 2,3 kHz (mit Multimeter gemessen). Wie stelle ich (in Bascom) eine Fast PWM ein? Takt ist 9,6 MHz. Achja, sorry das ich keinen Code gepostet habe, der ist nämlich auf nem anderen Rechner. Uns auch ins Datenblatt habe ich geschaut, leider klemmts gewaltig beim Englisch und ausserdem brauche ich den gesuchten Befehl/Codeschnipsel in Bascom. Also weiss da jemand (einfachen) Rat??
Hallo, ohne den schon bestehenden Bascom-Code wirds schwer bis unmöglich dir zu helfen... Bitte Code posten.
19 kHz zu 2.3 kHz ist ungefähr ein Faktor 8.
Daher würde ich das hier
> Takt ist 9,6 MHz
erst mal in Zweifel ziehen. Hast du die 9.6MHz kontrolliert?
$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack = 5 $framesize = 16 Config Portb.0 = Output 'Ausgang für PWM an PB0 Config Portb.1 = Output 'Ausgang für LED blau Config Portb.3 = Input 'Eingang für Taster an PB3 Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1 'Timer für 8-Bit PWM einstellen Taster1 Alias Pinb.3 'Taster Konfiguration Config Taster1 = Input Portb.3 = 1 'PullUp-Widerstand einschalten Do Debounce Taster1 , 0 , On_taster1 , Sub 'Taster entprellen Loop End On_taster1: 'Subroutine Taster "Ein" If Pwm0a = 0 Then Pwm0a = 140 Portb.1 = 1 'LED blau "Ein" Else Waitms 400 Pwm0a = 0 Portb.1 = 0 'LED blau "Aus " End If Return
Karl Heinz Buchegger schrieb: > erst mal in Zweifel ziehen. Hast du die 9.6MHz kontrolliert? Nein, wüsste nicht wie ich das machen sollte..
Noch so ein Anfänger :-) schrieb: > Karl Heinz Buchegger schrieb: >> erst mal in Zweifel ziehen. Hast du die 9.6MHz kontrolliert? > > Nein, wüsste nicht wie ich das machen sollte.. zb in dem du mit WAITMS(1000) eine LED blinken lässt. Wenn die 9.6Mhz stimmen, dann tut sie das auch mit 1 Sekunde an, 1 Sekunde aus. Wenn die 9.6Mhz nicht stimmen (und dein Tiny immer noch auf den Werkseitigen 1Mhz steht), dann sind die Blinker entsprechend länger. Und den Unterschied zwischen 1 Sekunde und 8 Sekunden sieht man mit freiem Auge.
ALso
1 | $regfile = "attiny13.dat" |
2 | $crystal = 9600000 |
3 | $hwstack = 16 |
4 | $swstack = 5 |
5 | $framesize = 16 |
6 | |
7 | Config Portb.1 = Output 'Ausgang für LED blau |
8 | |
9 | Do |
10 | Portb.1 = 1 |
11 | waitms 1000 |
12 | Portb.1 = 0 |
13 | waitms 1000 |
14 | Loop |
Hast du 1 Sekunde Led an/aus, oder nicht? Ich überprüf inzwischen, ob der Tiny13 eine CKDIV8 Fuse hat.
Karl Heinz Buchegger schrieb: > Ich überprüf inzwischen, ob der Tiny13 eine CKDIV8 Fuse hat. Hat er. Und sie ist standardmässig eingeschaltet. Hast du sie ausgeschaltet?
Die LED war ca. jeweils ca. 8 s an und aus. Du hast also Recht, der Takt stimmte nicht. Den Atmega8 hatte ich mit Yaap geflasht, den Tiny erkennt das Programm nicht. Mit PonyProg geht es auch nicht. Also habe ich es mit dem myAVR Progtool probiert und es geht. Leider haben die Jungs die Eistellung der Fuses etwas anders gestaltet und zudem noch eine Funktion "divide clock by 8" hinzugefügt. Diese war aktiviert... Also vielen Dank Karl Heinz, für die schnelle und kompetente Hilfe. Ich wünsche noch ruhige Feiertage. Grüsse, Thomas.
Edit: CKDIV8 ist wohl die Abkürzung dafür.. Manchmal stelle ich mich aber auch blöd an..
Karl Heinz Buchegger schrieb: > Ich überprüf inzwischen, ob der Tiny13 eine CKDIV8 Fuse hat. Es ist nicht nötig, diese Fuse zu verändern. Es reicht völlig zu, in der AVR-Software das I/O-Register CLKPR einzustellen. Das erfordert 3 Zugriffe, zuerst 128 (Schreibschutz-Freigabe-Bit), dann zweimal hintereinander den gewünschten Teilerwert (0 bei 1 zu 1). Frohen Rest vom Fest... ...
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.