Hallo zusammen, in einem Programm zur Erfassung einer Pulslänge und Pulspause mit der Funktion Pulsein() habe ich die Standards aus der Bascomvorlage genommen und es funktioniert auch so weit. Wenn ich den internen Takt um die PWM Frequenz von den hier eingestellten ~32Hz auf notwendige ~50Hz erhöhe zeigt die Software Uart nur noch Müll an. Kann ich mit meinen Anfängerwissen etwas ändern um dies zu beheben. Bei dieser Änderung kommen die 50Hz PWM heraus. Fusebit [62] FEDCBAD von 100010 von int. 8MHz auf 100011 mit 6,4 MHz Bei der Änderung des " $crystal = 1000000" tut sich nicht das erhoffte. In dem Beispiel erhöhe ich den PWM Wert jede 200ms um je 1 und zusätzlich an PinB.3 einen ext. Puls/ PWM zu vermessen. Kann mir einer mit den Angaben helfen ?????????? Gruß Schorsch $regfile = "atTiny25.dat" $crystal = 1000000 $hwstack = 24 $swstack = 8 $framesize = 24 'by default the tiny25 has a 8 MHz internal osc. 'and by default the internal 8 divider is enabled resulting in 1 Mhz clock freq. Dim I As Byte Dim B1 As Byte Dim B2 As Word Dim B3 As Word Config Timer0 = Pwm , Prescale = 64 , Compare A Pwm = Clear Down , Open "COMB.4:9600,8,N,1" For Output As #1 Do Pulsein B2 , Pinb , 3 , 1 Print #1 , "Zeit " ; B2 Pulsein B3 , Pinb , 3 , 0 Print #1 , "Zeit " ; B3 Waitms 200 I = I + 1 Print #1 , I Close #1 B1 = I Ocr0a = B1 ' Ocr1a = B1 Waitms 200 Loop End
Welchen takt hast du nun an deiner CPU? für die Berechnung der UART benötigt BASCOM ganz genau diese angabe bei crystal
Hallo Sebastian, Das steht so im Beispiel: 'by default the tiny25 has a 8 MHz internal osc. 'and by default the internal 8 divider is enabled resulting in 1 Mhz clock freq. bei dieser Einstellung $crystal= 1000000 geht es auch, für die andere PWM frequenz brauche ich den 6,4 Mhz Takt. ich glaube da liegt der Fehler !!!!! Die $crystal Eingabe ist die Programmabstimmung der über die Fusebit eingestellte CPU Frequenz. Wenn ich also die Fusebit auf int. Oszi 6,4MHz setze muß auch die $crystal Eingabe auf den Divisor von 8 abgestimmt stehen, das heißt nicht 1000000 = 1Mhz sondern 800000 = 0,8Mhz. werde ich gleich direkt mal testen. Ich dachte dummer weise das die $crystal Eingabe die tatsächliche Anweisung für die CPU ist und nicht die Abstimmung von Bascom auf die CPU ---------------------------------------- int. Oszi 6,4Mhz, Fusebit Divisor = 8, $crystal = 800000 Getestet = geht nicht int. Oszi 6,4Mhz, Fusebit Divisor = off, $crystal = 6400000 Getestet = geht nicht ----------------------------------------- mach ich was falsch ????? was kann ich noch testen Gruß Schosch
Das Schalten auf 6,4MHz hat weitreichende Folgen, da der Chip dann als ATTiny15 arbeitet. Der Timer ist völlig anders, 2 Pins werden vertauscht, das Calibrationsbyte muß per Software geladen werden usw. Warum setzt Du den Prescaler nicht auf 4 (2MHz CPU-Takt), dann ist Deine PWM bei etwa 61Hz. Peter
Hallo Peter, dann fällt das runterschalten natürlich aus. Wo muß ich den Prescaler wie einstellen.??? ich arbeite mit Bascom !! In den Fusebit wird mir nur 8 oder 6,4Mhz im Dropdownmenü angeboten und der CPU-Divisor ist auch auf 8 fest, der geht nur on oder off. Hilfe !!!!!!!!!!! oder ext. Takt ob dann mit 2MHz die Pulsein() Funktion noch so genau funktioniert wie jetzt ????!!!!! Gruß Georg
Hi >der CPU-Divisor ist auch auf 8 fest, der geht nur on oder off. Nein. Dein AVR hat ein Clock Prescale Register – CLKPR. Das erlaubt den Takt mit den Faktoren 1,2,4,8,... 128,256 zu teilen. Mit dem Fusebit wird lediglich zwischen 1 und 8 geschaltet. Die anderen Teilerfaktoren musst du per Hand umschalten. Mal abgesehen davon: Die PWM-Frequenz stellt man mit dem Vorteiler des Timers und einem passenden Top-Wert ein. Damit lässt sich das sehr genau machen. Mach dich mal im Datenblatt mit den Funktionen des Timers vertraut. MfG Spess
Hallo Spess, das übersteigt meine Fähigkeiten - in der Bascom Hilfe gehts auch nicht weiter !!!??? Gruß Schorsch
@Georg Du kannst auch in Bascom direkt in Register schreiben. Zum Beispiel so: CLKPR=&B1000XXXX wobei die "X" in den Bits 0,1,2 und 3 den Teilerfaktor einstellen. Im Datenblatt (bei mir auf der Seite 31) findest Du eine Tabelle dafür. Für den Teilerfaktor 2 würde es so aussehen: CLKPR=&B10000001 MfG Paul
Hi @Paul Vorsicht, da ist ein bestimmtes Timing einzuhalten. Ich weiss nicht, ob das in Bascom (ohne Asm) hinzubekommen ist. MfG Spess
@Spess Danke für den Hinweis. Ich kann es in Natura leider jetzt nicht ausprobieren, bin aber ein großer Fan von "Direkt-in-Register-Schreibereien", weil ich dann selbst sehe, was ich da angerichtet habe. Das ist mit den "normalen" Bascom_Befehlen nicht immer so. ;-) MfG Paul
Hi >...bin aber ein großer Fan von "Direkt-in-Register-Schreibereien",... Genau deshalb programmiere ich in Assembler. BASCOM ist für viele mit Sicherheit ein einfacher Einstieg, weil man sich um viele Sachen nicht kümmern muss. Allerdings stellt es ,wie z.B. bei PWM, nur einen arg 'kastrierten' AVR zur Verfügung. Die Teile können wesentlich mehr. MfG Spess
Hallo zusammen, $regfile = "atTiny25.dat" $crystal = 2000000 ' 8Mhz / 4 = 2000000 $hwstack = 24 $swstack = 8 $framesize = 24 Clkpr = &B10000010 ' für Teilefaktor 4 so sollte es dann aussehen ????????? wird dann die Eintraguing in den Fusebit überschrieben oder muß ich da den Teiler 8 manuell auf Off setzen ich versuche es !!!!! mit Fusebit Teile 8 manuell auf off und obiger Config - kein Erfolg die Uart gibt immer noch Müll aus und der PWM Takt liegt jetzt bei ca 258Hz. Die CLKPR Eintragung bleibt also ohne Wirkung !!!! Nur in der ersten Configuration gibt die Uart das richtig ohne Müll aus. Was kann ich noch versuchen Gruß Schorsch
Hi Versuche das mal an den Anfang deines Programms zu setzen (nach den Vereinbarungen). $ASM Ldi R16 , &B10000000 Out CLKPR,R16 Ldi R16, &B00000010 Out CLKPR,R16 $END ASM Ich kenne BASCOM eigentlich nicht, und in Assembler habe ich das auch noch nicht gemacht, deshalb keine Gewährleistung. MfG Spess
Hallo Spess eine PWM mit ca 64 Hz Grundfrequenz wird jetzt erzeugt - Lösung Teil 1 super Klasse Mit der Einstellung geht die Software Uart aber immer noch nicht und bringt nur Müll $crystal = 2000000 ' 8Mhz / 4 = 2000000 die &B00000010 geben den Teiler 4 aus richtig !!! Gruß Schorsch
Hi Zu 1. Gut. Wieder ein kleiner Erfolg meines Feldzugs für die Notwendigkeit von Assemblerkenntnissen. Allerdings muss ich dir sagen, dass der interne RC-Oszillator nicht unbedingt für eine serielle Kommunikation geeignet ist. Einfach zu ungenau. Ich kenne deine Hardware nicht. Aber wenn du die Möglichkeit hast einen Quarz anzuschliessen, würde ich das tun. MfG Spess
Hallo Spess, du meinst einfach einen ext. Quarz anschließen. Der int. Quarz erzeugt dann sicher mit der Software Uart tolerierbare Fehler bis zu den 1Mhz und darüber ist die Fehlerquote zu hoch und das schei... Timming gibt der Uart den Rest. Ich werde es direkt heute Abend testen. Vieleicht probiere ich das ganze mal mit einem Attiny45 den habe ich auch noch hier. Gruß Schorsch
HI
>du meinst einfach einen ext. Quarz anschließen. Der int. Quarz erzeugt...
Ja, aber die 22p-Kondensatoren nicht vergessen. Der ATTiny hat keinen
internen Quarz, sondern einen RC-Oszillator. Deswegen ist der ja so
grottenschlecht.
MfG Spess
Hallo Spess, das ist........ es jetzt gehts perfekt mit dem 8MHz Quarz: PWM geht in den Frequenz, Software Uart geht bei jedem Wechsel des Teilers und Einstellung der richtigen $crystal in Bascom. Super Danke !!!!!! Leider sind so 2 Pine zusätzlich belegt. Geht an dem ATTiny25 auch an PB2 eine PWM ??????? ich hab da im Datenblatt was gelesen mit Timer/Counter 1 - komme mit meinem recht alten Schulenglisch nicht wirklich weiter. Danke nochmal Gruß Schorsch PS: Assembler perfekt !!!!
Hi >Geht an dem ATTiny25 auch an PB2 eine PWM ??????? Nein. Nur an den Pins, an denen 'OC..' dran steht ist eine PWM möglich. Abgesehen davon ist der Timer1 des ATTiny25 um einiges komplexer als normale AVR-Timer. Ich glaube nicht, das BASCOM das untersützt. Evtl. kann der aber wie ein normaler Timer behandelt werden. Vielleicht solltest du mal auf andere Typen umsteigen, z.B. ATMega48/88/168. MfG Spess
Hallo Spess, Ich möchte den Tiny gerne im Auto einsetzen. Für die Funktionalität recht der 8 Pin MC eigentlich aus. Er soll eine PWM ausmessen und die manipuliert an eine Pin mit PWM und gleicher Grundfrequenz wieder ausgeben. Ich beschäftige mich jetzt ca. 2 Wochen mit dem Atmel, bin quasi Umsteiger von den C-Control bzw. den Open C-Controllern. Je mehr ich von den Atmel erfahre desto interessierte bin ich. Bei der MC Bestellung habe ich mir Tiny26 und Mega8 mit bestellt. So kann ich die Technik noch näher ergründen. Ich sag nochmal danke für die Hilfe.!!!!! Gruß Schorsch
spess53 wrote: > Abgesehen davon ist der Timer1 des ATTiny25 um einiges komplexer als > normale AVR-Timer. Ich glaube nicht, das BASCOM das untersützt. Du mußt nicht immer die Bascom-Blackboxen benutzen, Du kannst auch wie in jeder anderen Programmiersprache die Register direkt setzen und lesen. Ich mache das unter C nur so. Ich mag es, wenn ich auch sehe, was ich mache. Peter
schorschi wrote: > Je mehr ich von den Atmel erfahre desto interessierte bin ich. Bei der > MC Bestellung habe ich mir Tiny26 und Mega8 mit bestellt. Das ist schade, das sind Auslaufmodelle. Du hättest besser gleich die aktuellen Typen ATtiny261 bzw. ATmega88 bestellen sollen. Peter
@Georg Bremus (schorschi) >das ist........ es jetzt gehts perfekt mit dem 8MHz Quarz: >PWM geht in den Frequenz, Software Uart geht bei jedem Wechsel des >Teilers und Einstellung der richtigen $crystal in Bascom. Herzlichen Glückwunsch zur 1001. Wiedererfindung des Rades. AVR-Tutorial: UART MFG Falk
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.