Bascom ext. Frequenz?

tiger08

Neues Mitglied
23. Nov. 2012
16
0
0
Sprachen
Hallo Gemeinde :)

ich bin neu in der Atmega serie eingestiegen um eine steuerung aufzubauen.
Mein Problem:
habe den Atmega1284P mit einem ext.8mhz quarz - die fuse bits hab ich Low DF / High D9 / ext. FF eingestellt.
Im programm selbst, hab ich momentan nur eine kleine testrutiene mit einer led an einem port eingebunden, die auch läuft.
die ext. beschaltung noch ist ein LCD und ein paar tasten..sonst erstmal nix!!

im Programm selbst steht am anfang nun:

'***************************************
'$regfile = "m1284pdef.dat"

$hwstack = 64
$swstack = 64
$framesize = 40

$crystal = 8000000
'***************************************

nun das eigentliche Problem:

dieses und alle anderen testprogramme laufen mit dieser einstellung langsammer, wie wenn ich im programm
"$crystal = 8000000" auf 1000000 (1mhz) setze.
WIE ist das möglich????

kann mir einer einen tip geben was mache ich falsch

Bascom einstellung steht auch auf 8000000 bzw. 1000000

besten dank im voraus

Gruß Frank
 
Hallo Frank,

normalerweise hätte ich auf das Fusebit CKDIV8 getippt. Das ist von Werk aus programmiert und würde den Takt vom Oszillator durch 8 teilen. Aber nach deinen Fusebiteinstellungen ist CKDIV8 nicht programmiert. Auch die Fusebiteinstellung für die Systemtaktquelle stimmt eigentlich.

CKSEL3..1 = 1118.0 - 16.0
CKSEL0 = 1, SUT10 = 01Crystal Oscillator, BOD
enabled, 16K CK + 14CK
CKDIV8 = 1Prescaler aus


Nun gibt es noch die Möglichkeit einen Prescaler für den Systemtakt über das Register CLKPR einzustellen. Ich denke mal nicht, dass hier BascomAVR irgendetwas nach dem Reset einstellt. Mit Bascom kenne ich mich aber leider nicht so gut aus.

Also nach meiner Meinung stimmt jedenfalls die Fusebiteinstellung, hier dürfte der Fehler eigentlich nicht zu finden sein.

Vielleicht hat aber noch jemand ein paar Ideen.

Dirk :ciao:
 
Hallo Frank,

ich weiß jetzt nicht, was der Atmega1284p für Fuses hat, aber schau mal ob "DIVCLK/8" programmiert ist. Diese Fuse macht nämlich genau das. Wenn sie programmiert ist, läuft Deine MCU mit F_CPU/8, also hast Du 8MHz Quarz, läuft sie mit 1MHz.

Achja, wir haben es gern, wenn man sich vorstellt. Ist zwar kein Muss, wird aber gern gesehen :)

EDIT: Mist, zu langsam, Dirk war schneller.

Grüße
Heinrich
 
oh danke euch für die schnelle anwort :)

aber das mit der div/8, auch wenn diese eingeschaltet wäre! würde ja 1mhz /8 immer langsamer sein wie 8mhz /8 :)

habe noch diverse einstellubngen versucht ->
der quarz ist mit je 20pf abgeblockt und ist ein H49 typ,direkt am atmega.
auch diverse fuse einstellungen, wie z.B. "high swing..."
ändern nix an der taktgeschwindigkeit. :-(

wo würde ich denn das fuse bit CLKPR finden??


Vorstellung meiner Person:
komme aus DD und bin Techniker/elektroniker mache viel und rep. alles was so leuchtet und klimpert :-D
 
Hallo Frank,
habe noch diverse einstellubngen versucht ->
der quarz ist mit je 20pf abgeblockt und ist ein H49 typ,direkt am atmega.
auch diverse fuse einstellungen, wie z.B. "high swing..."
ändern nix an der taktgeschwindigkeit. :-(

also wie schon geschrieben, vermute ich den fehler nicht bei den Fusebits.

wo würde ich denn das fuse bit CLKPR finden??
CLKPR ist kein Fusebit sondern ein Register. Nach dem Reset erhält dieses Register abhängig vom Fusebit CKDIV8 einen Initialisierungswert (Presacler aus oder Prescaler DIV8). Hier kannst du in der Applikation nachträglich einen Prescaler für den Systemtakt einstellen.
Wenn hier BascomAVR nichts einstellt, ist der Prescaler aus und du müsstest normalerweise als Systemtakt den Oszillatortakt haben. Ich denke nicht, dass hier BascomAVR etwas einstellt. (Ich habe es nur erwähnt, weil dies noch eine Möglichkeit wäre, den Oszillatortakt zu teilen.)

Dirk :ciao:
 
Hallo Frank!

Ich habe zwar gerade nicht viel Zeit, aber ich möchte dich trotzdem erst mal auf die Schnelle im AVR-Praxis Forum willkommen heißen! :ciao:

Tja, bei deinem Problem würde ich nun auch erst mal an die FUSES denken....
Stellst du die Fusebits mit BASCOM ein, oder nimmst du dafür ein anderes Programm?

Hast du vielleicht die Möglichkeit einen Snapshot von den Fusebiteinstellungen zu machen und hier einzustellen?

Dein derzeitig komplettes Programm könnte uns ggf. natürlich auch weiterhelfen, wobei ich eher an die FUSES denke.


Grüße,
Cassio
 
...dieses und alle anderen testprogramme laufen mit dieser einstellung langsammer, wie wenn ich im programm
"$crystal = 8000000" auf 1000000 (1mhz) setze.
WIE ist das möglich????...
Welcher Quellcode wird denn verwendet?
Dir ist vielleicht nicht ganz klar, was "$crystal" bewirkt...

Anhand Deiner Fuses ist der Mega durch eine externen Quarz (mit mindestens 8MHz) getaktet (d.h. der Mega versucht das, was an den XTAL-Beinchen hängt zum schwingen zu bringen, und gewinnt aus diesen Schwingungen seinen Takt.
Das hat nichts mit der Crystal-Direktive zu tun.
Die Crytal-Direktive sagt Bascom, welchen Quarz du zu verwenden meinst - Bascom braucht diese information, um irgendwelche ggf nötigen Timings, Verzögerungen etc auszurechnen.
Der Kontroller hat ja keine Uhr. Alles läuft auf der Basis dieser Schwingungen, der Takte ab. Wenn Du Bascom sagst "Warte soundsoviel ms", rechnet Bascom mit der, bei Crystal angegebenen(!) Frequenz aus, wieviele Takte zu warten sind.
Wenn Du also eine geringere Frequenz angibst, kommen bei derselben Zeit auch weniger Takte raus. Wenn da jetzt aber immer noch der schnelle Quarz schwingt, sind alle Zeiten (logischerweise) zu kurz berechnet -> alles ist schneller.
Die Crystal-Angabe hat desweiteren Einfluss auf die Timer (wenn man da Überlauf-/Comparezeiten etc vorgibt) und die Geschwindigkeit von seriellen Verbindungen, etc...
 
ok an LotadaC! und auch an euch anderen :)
Danke Dir für die ausfühliche beschreibung :)

mir ist die sache mit dem $crystal schon klar, nur verstehe ich nicht ganz warum das programm mit 8mhz trotzdem sehr langsam läuft als mit meiner alten guten c-control.....

ich veruch mal das testprogramm hier hochzuladen, da ist nix weiter drin, Toggle nur einen ausgang und $crystal steht
auf 8000000 sowie im Compiler von Bascom auch.
Die fuse häng ich auch mal mit dran. Hab da schon semtliche einstellungen versucht. u.a von http://www.engbedded.com/fusecalc zum gegentest....
Bei 8000000 taktet die led etwa im sekundentakt und am takteingang habe ich zum Test einen ext. Clock gennerator mit 8mhz. vorher eine quarz.

wenn nun mein eigentliches programm (etwa 60k groß...) nun auf den atmega kommt, das dauert doch dann sooo was von lange bis der mal ne programmrunde fertig macht...:-( :-(

gruß an alle und einen schönen Abend
Frank
 

Anhänge

  • Fuse-1284P.jpg
    Fuse-1284P.jpg
    98,4 KB · Aufrufe: 15
  • Fuse-1284P-2.jpg
    Fuse-1284P-2.jpg
    95,8 KB · Aufrufe: 13
  • fr-test-02.bas
    13,4 KB · Aufrufe: 9
  • Fuse-1284P-1.jpg
    Fuse-1284P-1.jpg
    78,2 KB · Aufrufe: 12
achso die umgebung:

Bascom 2073 - Prommer USB AVR mit Atmega8 - die fuse stell ich mit Bascom ein
LCD M50530 und / oder standart LCD 16x4

Grüßchen
 
Hallo Frank,

deine Fusebit KLA987 müsstest Du auf Ext. Crystal umstellen.
Sach ich mal jetzt so...

Gruß
Gerry
 
Hallo!

Tja, also die Einstellung bei FUSEbit KLA987 hätte ich für einen externen Quarz natürlich auch angemerkt. :wink:

Bei einem Quarz muss du auf alle Fälle "ext. Crystal" verwenden, sonst funktioniert das nicht und dein AVR ist nicht mehr erreichbar. :cool:


Zum Ablauf des Programmieren kann ich nichts sagen, da ich den Programmer nicht kenne.
Keine Ahnung wie BASCOM damit arbeitet. :hmmmm:
Da du aber scheinbar FUSES auslesen und einstellen kannst, sollte der Programmer wohl OK sein.


Dein angehängtes Programm habe ich mir mal angesehen.....
Das ist aber nicht dein kleines Testprogramm, bei dem nur eine LED getoggled wird. :wink:

In deinem angehängten Programm steht zu Beginn auch dies:
Code:
'**************** AtMega Config********************************************

$regfile = "m1284pdef.dat"                                  ' ATMega32
[B][COLOR="#FF0000"]$crystal = 100000[/COLOR][/B]
'Config Sysclock = 32MHZ , Prescalea = 1 , Prescalebc = 1_1   ' use 32 MHz
'!OUT CLKPR, R16

'!Clkpr = 0x00

[B][COLOR="#FF0000"]$hwstack = 32
$swstack = 32
$framesize = 40[/COLOR][/B]

'**************** AtMega Config********************************************

Die angegebene Frequenz sind nur 100kHz und nicht 1MHz.

Dann sind die STACK-Werte und die FRAMEsize für das Programm viiiiiel zu klein!
Mit diesen Miniwerten wirst du bestimmt Probleme bekommen.
Ich würde alles mal auf 128 setzen, um etwas Sicherheit zu haben. Der Mega1284 hat ja genug Platz. :)


Tja, das erklärt aber immer noch nicht dein eigentliches Problem. :hmmmm:
Hast du vielleicht noch einen anderen (pingleichen !!!) AVR zur Hand?

Grüße,
Cassio
 
ja doch,das ist mein bzw. ein kleines programm, um alles andere auszuschließen, hab ich nur ein ausgang getoggelt

und ja du ,das war ein tippfehler, da stand dev. 1000000 drin, aus jux hatte ich wohl mal 10000 geändert :)

den ext. clock mußte ich vorhin drann hängen weil ich de fuse auf 0000 gesetzt hatte und somit kein zugriff mehr hatte
wie gesagt vorher war ein quarz dran. somit hab ich auch gleich diesen quarz ausgeschlossen auf fehler.
nee du ich hab nur den einen atmega1284p :-(
 
Hallo Frank!

Ich hoffe, du konntest deinen AVR inzwischen "wiederbeleben"!


Tja, wenn du keinen anderen pingleichen AVR zur Hand hast (Mega16, Mega32, Mega644), dann fällt der Test mit dem Austausch des Controllers eben weg. :wink:


Dumm ist nur, dass keiner mehr eine Lösung zu deinem Problem haben wird, weil eigentlich alles richtig ist.
Hast du inzwischen mal die Werte für die STACKS und die FRAMESIZE erhöht?

Bei der Menge an Variablen und dergleichen musst du da einfach mehr Platz einplanen.

Grüße,
Cassio
 
ja klar du, der lebt schon lange wieder :) dank meiner großen elektronikkiste :-D

die STACKS hab ich beide auf 128 gesetzt und die FRAMESIZE auf 80
da war die programierung aber anders mußte jedes mal 2 mal prog.. bis das programm läuft...kann auch sein das das zufall war...muß ich beobachten.

wenn du mein kleines testprogramm siehst wie hoch/schnell sollte deiner meinung nach die toggle der led sein???

cico Frank
 
Hallo Frank!

Sorry, ich habe mir dein Programm jetzt nicht weiter angesehen, weil ich es nicht für das Testprogramm gehalten hatte. :wink:

Ich kann es mir ja noch mal ansehen.....
aber heute wird das wohl nichts mehr werden. Bestenfalls morgen Abend.

Wenn es für dich OK ist, dann würde ich das Programm hier mit Code-Tags einstellen.
So kann jeder User mal schnell einen Blick drauf werfen. Es lädt sich nicht jeder gern extra ein Programm herunter.... wenn er ggf. noch nicht mal BASCOM hat bzw. verwendet.
Auf diese Weise gehen manchmal hilfreiche Tipps "verloren" die andere User sonst entdecken würden.

Du kannst das Programm aber natürlich auch selber hier einstellen.
Einfach oben in der Leiste das " # " anklicken und den Programmcode dort hinein kopieren.


Grüße,
Cassio
 
wenn du mein kleines testprogramm siehst wie hoch/schnell sollte deiner meinung nach die toggle der led sein???


Hallo Frank!

Ich habe dein Programm eben doch noch mal durch den Simulator gehauen. :wink:
Bei 1MHz Systemtakt benötigt deine Hauptschleife (Programm / Goto Programm) etwas über 62ms.

Demnach sollte die LED alle 62ms ihren Zustand wechseln. :wink:
Deine Displayansteuerung verlangsamt dein Programm leider so sehr.


Grüße,
Cassio
 
Hallo und guten morschen an alle hier :)

habe gestern noch das Register CLKPR vom Atmega1284P ausgelesen und der wert ist "00"

gehe ich richtig in der Annahme, das in diesen Register unter Bit0-Bit3 (CLKPS3 CLKPS2 CLKPS1 CLKPS0)
die cksel's abgespeichert werden???
Wenn? wieso steht da 00 drin, wenn ich Fuse_Low ="DE" und Fuse_High= "DF" eintrage?
und auch wieder über Bascom auslesen kann :confused:
CLKPCE ist auch 0

Gruß Frank

Bitte erleuchtet mich mal :cool:
 
Hi Cassio

oh Danke Dir !!! genau das hab ich mir auch vorgestellt und erwartet, nur bei mir scheint der wurm drin zu sein.
Sag mal mit welchen Programm schreibst du den quellcode und prog. du deinem Atmega??

einen schönen Tag
Gruß Frank
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)