mikrocontroller.net

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


Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Heyn (Gast)
Datum:

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

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg B. (schorschi)
Datum:

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

Gruß
Schorsch

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg B. (schorschi)
Datum:

Bewertung
0 lesenswert
nicht 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 !!!!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.