nach Takterhöhung an ATtiny25 nur noch Müll aus der Sotware Uart

#945043
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
#945219
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
#945320
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
Gast #945328
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
Gast #945466
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
#945476
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
Gast #945537
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
Gast #946007
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
#946578
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 !!!!
Gast #946602
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
Gast #946615
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
#946734
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren