Forum: Mikrocontroller und Digitale Elektronik nach Takterhöhung an ATtiny25 nur noch Müll aus der Sotware Uart


von Georg B. (schorschi)


Lesenswert?

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

von Sebastian Heyn (Gast)


Lesenswert?

Welchen takt hast du nun an deiner CPU? für die Berechnung der UART 
benötigt BASCOM ganz genau diese angabe bei crystal

von Georg B. (schorschi)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Georg B. (schorschi)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Georg B. (schorschi)


Lesenswert?

Hallo Spess,
das übersteigt meine Fähigkeiten - in der Bascom Hilfe gehts auch nicht 
weiter !!!???

Gruß
Schorsch

von Paul Baumann (Gast)


Lesenswert?

@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

von spess53 (Gast)


Lesenswert?

Hi

@Paul  Vorsicht, da ist ein bestimmtes Timing einzuhalten. Ich weiss 
nicht, ob das in Bascom (ohne Asm) hinzubekommen ist.

MfG Spess

von Paul Baumann (Gast)


Lesenswert?

@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

von spess53 (Gast)


Lesenswert?

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

von Georg B. (schorschi)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Georg B. (schorschi)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von schorschi (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Georg B. (schorschi)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von schorschi (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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