PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Takt funktioniert nicht richtig



Snaper
24.07.2010, 19:41
Hallo,

habe mir ein kleines Testboard für einen Mega32 gebaut. Und nun habe ich dass Problem, dass es wohl so aussieht als das der Takt nicht hinkommt. Ich stelle 100ms ein und die LED blinkt alle 1-2 Minuten. Also sie bleibt um die 2 Minuten aus und geht dann 2 Minuten an. Kann es am Quarz liegen oder wie kann ich dies ausschließen oder was sind andere Fehlerquellen?

BMS
24.07.2010, 19:45
Welche Quarzfrequenz?
Welches Programm?
Schon mal Fuses gecheckt / jemals eingestellt (z.B. mit Ponyprog) ?? Daran liegts höchstwahrscheinlich. Um rauszufinden, wie du die Fuses setzen musst, such mal in google nach "avr fuse calculator"

Snaper
24.07.2010, 19:58
Quarzfrequenz ist 16Mhz.
Haben ihn sowohl mit Bascom als auch mit C beschrieben beide male gleiches Ergebnis.
Fusebit KLA 987 steht auf 001111 Ext. Crystal/Resonator High Freq.
Andere Fusebits habe ich nicht umgestellt.

for_ro
24.07.2010, 20:01
Zeig doch mal, wie du die "100ms eingestellt" hast.

Snaper
24.07.2010, 20:16
BASCOM

$regfile = "m32def.dat"
$crystal = 16000000

Config Porta = Output
Config Portc = Output


Do
Portc = &B00000000
Porta = &B00000001
Waitms 100
Porta = &B00000010
Waitms 100
Porta = &B00000100
Waitms 100
Porta = &B00001000
Waitms 100
Porta = &B00010000
Waitms 100
Porta = &B00100000
Waitms 100
Porta = &B01000000
Waitms 100
Porta = &B10000000
Waitms 100
Porta = &B00000000
Portc = &B10000000
Waitms 100
Loop
C


#include <avr/io.h> // (1)

#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun mit 16000000 definiert"
# define F_CPU 16000000UL
#endif
#include <util/delay.h>

int main (void) { // (2)


DDRB = 0x00;
//PORTB = 0xff;
DDRA = 0xff;
// (3)
//PORTA = 0xff; // (4)
PORTA = 0x00;
//PORTA = (1 << PA7);
while(1) { // (5a)
/* "leere" Schleife*/ // (5b)
PORTA |= (1<<PA0) | (1<<PA7);
_delay_ms(100);
PORTA = 0x00;
_delay_ms(100);
} // (5c)

/* wird nie erreicht */
return 0; // (6)
}


Sollte eigentlich stimmen. Also noch jemand ne idee?

radbruch
25.07.2010, 00:10
Hallo

Der Defaulttakt des Mega32 ist intern 1MHz (Datenblatt Seite 25, "Default Clock Source") Schreibt doch mal was mit blinkenden Leds im Sekundentakt und 1MHz Kontrollertakt. Dann siehst du gleich ob die Fuses stimmen.

Das wäre dann aber nur Faktor 16 und kein Effekt wie du ihn beschreibst. Schwingt dein Quarz überhaupt? Wenn dein Mega32 mit internem Takt normal läuft stimmt etwas mit dem Quarz oder seinen Kondensatoren nicht. Da kenne ich mich aber nicht aus...

Gruß

mic

Snaper
25.07.2010, 14:30
Habe jetzt mal im C-Programm auf 1Mhz umgeschaltet aber ist weiterhin unregelmäßig. Wenn ich aber nun auf Intern 1 Mhz umschalte dann ist es richtig. Aber ich möchte ja meinen externen 16Mhz nutzen.

Besserwessi
25.07.2010, 14:55
Bei dem C Programm muß man mit Optimierung übersetzen, ohne stimen die Zeiten aus Delay nicht - man sollte dann aber eine Warnung erhalten.

Snaper
25.07.2010, 15:17
Okay und wie tue ich das? Ich bin grade erst auf C umgestiegen :(. Aber denkt ihr denn nicht, dass es eher ein Hardware Problem ist? Denn warum sonst sollte der Takt nicht richtig funktionieren? Sowohl in C als auch in Bascom

dremler
25.07.2010, 17:30
wie hast du denn den takteingang beschalten?

hast du ein oszi?

Snaper
25.07.2010, 17:55
Quarz ist an Pin12 und 13 mit 2 22pF Kondensatoren die auf GND gehen.

Nein ein oszi habe ich leider nicht hier und würde frühstens in der Schule in 5 Wochen eins benutzen können. Was mich stutzig macht ist, dass man den µC weiterhin beschreiben kann. Sollte doch bei einem defekten Quarz nicht funktionieren?

dremler
25.07.2010, 18:08
Doch, weil eine ISP Leitung unter anderem aus einem Taktsignal besteht.

Probier einfach mal einen anderen Quarz bzw. was genau steht bei dir unter win avr in der Taktzeile bei den fusbits?

Snaper
25.07.2010, 18:19
Ich habe bisher die Fusebits immer über Bascom eingestellt, wüsste auch nicht wie ich es mit winavr mache ?! Dennoch steht bei Bascom "Ext. Crystal/Resonator High Freq. ". Ich kanns auch nochmal in winavr nachschauen wenn du mir sagst wie.

Den Quarz habe ich übrigens vom Steckbrett runtergenommen nachdem ich ihn dort getestet habe.

dremler
25.07.2010, 18:49
Was nutzt du denn für einen Programmer?

Ich hab den AVR ISP mk2

dann starte ich winavr

tools
program avr
connect
dann auswählen mit was du programmierst...

dann den reiter Fuses
dann bei SUT_CKSEL sollte stehen:

ext. Crystal/Resonator High Freq.; Start-up time: 16K + 64 ms

Richard
25.07.2010, 19:02
Lade Dir einmal das AVR Studio herunter, das ist für (mich) sehr
übersichtlich bei der Fusebit Einstellung.

Ich vermute auch das es an den Fusebit´s Liegen kann. Lötstellen
oder Lötbrücken sind natürlich auch denkbar, schon mal mit dem
Ohmmeter auf Kurzschlüsse geprüft? Für solche Probleme ist ein Ozzi
oder zumindest ein Frequenzzähler einfach "Gold wert".

Gruß Richard

Snaper
25.07.2010, 19:06
Also ich benutze den mySmartUSB programmer. Und da kann ich über Program AVR nicht zugreifen. Und wo ich sonst die Fusebits nachsehen kann in AVR Studio weiß ich nicht ? Benutze dies noch nicht lange

dremler
25.07.2010, 19:15
naja musst du mal suchen ob es mit deinem programmer zum laufen zu kriegen is...

mache am besten mal einen screenshot, wenn du in bascom die ffuses ausgelesen hast:)

ich denke auch das es an den fuses liegt;)

Snaper
25.07.2010, 19:22
http://www.imagebanana.com/view/g7oc8hqk/fuses.jpg

dremler
25.07.2010, 20:31
machmal ein 101111 drauß und geb mal bescheid ob es besser wird?!

Snaper
25.07.2010, 21:17
Leider besteht das Problem weiterhin

dremler
25.07.2010, 21:28
Hm dann liegt es an etwas anderem.
mach mal ein einfaches programm wie:


$regfile = "m32def.dat"
$crystal = 16000000

DDRA=&b11111111


Do
toggle PortA
wait 1
loop
un schaue ob ein sekundentakt rauskommt...

Besserwessi
25.07.2010, 21:55
Wenn die Programmierung per ISP geht, dann muß der µC auch einen gültigen Takt haben. Die CLK Leitung beim ISP ist der Datentakt für die Übertragung - der mC braucht einen eigenen Takt, der mindestens 4 mal so hoch ist.

Bei AVRStudio +WinAVR als Compiler stellt man die Optimierung ein unter
Project - Configuration options. Unteroptimization sollte da -Os stehen (alternativ auch -O1 oder -O2). Ohne Optimierung sollte man aber vom Compiler eine Warnung bekommen, wenn man delay.h nutzt.

Snaper
25.07.2010, 22:31
Beides probiert bzw. probiert und nachgesehen. -Os ist eingestellt und beim Bascom Code kommt auch alles andere als 1 Sekunde raus. Momentan sind die LEDs seit gut 2 Minuten an und es wurde noch nicht einmal getoggelt. So langsam ist das hier echt merkwürdig.

dremler
25.07.2010, 22:34
Spannungsversorgung io?

mach mal ein bild von deiner schaltung...oben und unten;)

Snaper
25.07.2010, 22:54
Okay mache gleich morgen ein Bild davon denn ich muss um 04.30 Uhr aufstehen und müsste noch die Kamera raussuchen. Aber danke schonmal für die Hilfe. Foto kommt dann Morgen.

Snaper
26.07.2010, 16:11
Hier die Schaltung. Bestimmt keine Schönheit aber ist meine erste.

Oben: http://www.imagebanana.com/view/el9x3qzn/P1000481.JPG
Unten: http://www.imagebanana.com/view/jvk49d6y/P1000482.JPG

Richard
26.07.2010, 17:00
Am Prozessor schein 1 Lötstelle (*) kalt zu sein. Außerdem ist der Quarz
viel zu weit vom Chip entfernt! Die Kapazitäten der Leiterbahnen sind
dafür zu hoch. Ein Quarz gehört so dicht wie irgend möglich an den
Prozessor. Ob es da auch noch Lötbrücken gibt kann ich leider nicht
erkennen.

(*) die wo der Pin nicht glänzt.

Gruß Richard

Besserwessi
26.07.2010, 18:53
Die lange Leiterbahn am Quarz ist wirklich nicht gut, der Abstand ist noch nicht so schlimm, aber auch nicht gut.

Es ist gut möglich das der µC sich den Takt irgendwo als Störung einfängt und dann Zeitweise mit 100 Hz oder 50 Hz läuft.

Das sieht teilweise auch sehr nach Lötbrücken aus, vor allem an dem kleine IC.

Immerhin ist da wohl eine Abblockkondensator dran, ein zweiter, ander anderen Seite wäre ab auch nicht schlecht.

Snaper
26.07.2010, 20:35
Okay danke für die Tipps. Dann ist es wohl am sinnvollsten wenn ich die Platine halbiere und auf der andere Seite nochmal alles drauf mache. Diesmal jedoch präziser arbeite.