Forum: Mikrocontroller und Digitale Elektronik Hilfe und Tipps bei der Fehlersuche


von Thomas D. (thomasderbastler)


Angehängte Dateien:

Lesenswert?

Bei meinem neuen "Nachbau" Projekt habe ich echte Probleme, vielleicht 
habt Ihr einige Tipps. Stehe echt auf dem Schlauch !

Nun es geht um folgendes, ein DDS AVR Signalgenerator
http://www.scienceprog.com/avr-dds-signal-generator-v20/

Die Anzeige ist nur beluchtet und am Pin 19 des Atmega16 Kein Signal.
OpAmp und das Widerstandnetzwerk noch nicht eingelötet.


Den original Schaltplan habe ich geringfügig abgeändert und eine eigene 
PCB erstellt.

Was wurde gemacht :
1 . Firmware , HEX Datein mit Pony auf dem AVR übertragen.
2. PonyProg Fuse Einstellungen CKSEL 0 bis CKSEL 3,SUT0, SUT1 
deaktiviert,  alle andere Fuses ungeändert. Also diese Optionskästchen 
sind unmarkiert.

Eine LCD Anzeige 16x2 angeschlossen. Die Versorgung am AVR OK und habe 
die
LCD Leitungen RS.RW,E DB4 bis DB7 direkt von LCD bis Atmega Pin 
durchgemessen. OK. Die Anzeige ist OK. Kontrast auch...( Habe schon 
etliche Sachen mit AVRs und LCD gebaut )

Hier noch mein Schaltplan und Board.

Ich habe mal die Schaltung auch kurz auf dem Steckbrett 
zusammengesteckt. Das gleiche Ergebnis.

Bei der Fehlersucherei, habe auf dem AVR getippt, habe meinen letzten 
Atmega16 total verfused. Mit einem Quartzoszillator an XTAL1 kriege ich 
momentan auch keine Verbindung hin.

Wo kann ich noch suchen ?

von Stefan (Gast)


Lesenswert?

Du hast die Fuses für externe Taktquelle eingestellt, aber einen Quarz 
angeschlossen. Das kann nicht funktionieren. Ponyprog kann jetzt auch 
nicht mehr auf den Flash Speicher zugreifen, oder doch?

Wo sind denn die Abblock-Kondensatoren der 5V Spannungsversorgung? Die 
sind ganz wichtig!

von Thomas D. (thomasderbastler)


Lesenswert?

Moment, wenn CKSEL0 bis CKSEL3 im Ponyprog deaktiviert sind, dann ist es 
für einen Quarz.Das stimmt.

Nach dem ich verfused habe, habe mit einem Quarzoszillator versucht 
dranzukommen.

Die Schaltung bekommt 8V von einem Labor NT , ich denke das Problem, 
wenn eine LCD garnichts anzeigt, liegt nicht undbedingt an 100nF an 5V.


Auf dem Steckbrett geht auch nicht.

oder wie sollten die Fuses bei einem Atmega16 mit 16MHz Quarz aussehen 
in verbindung mit Ponyprog ?

von Stefan (Gast)


Lesenswert?

Ok, Ponyprog zeigt ein Häkchen, wenn die Fuse "0" ist - sehr verwirrend.

Wie ist das nun mit der Spannungsversorgung? Du hast doch nicht etwa 8V 
als VCC angelegt?

Kondensatoren an VCC sind sehr wichtig! Wenn die fehlen, dann kann alles 
mögliche passieren. Und wenn die Leitungen zwischen AVR und dem 5V 
Spannungsregler (bzw Netzteil) länger als 10cm sind, dann brauchst Du 
auch noch Elkos an VCC/GND, zum Beispiel 10yF.

Schwingt der Quarz? Wenn nicht, kümmer Dich um die Spannungsversorgung 
und kontrolliere die Fuses nochmal.

Wenn er schwingt, schreibe ein Minimalprogramm (z.B. LED Blinker), dann 
siehst Du, ob der AVR überhaupt funktioniert.

Die mir bekannten LC-Displays zeigen in nicht-initialisiertem EINEN 
grauen Balken an (alos ob der Kontrast schlecht eingestellt sei). Die 
andere Zeile bleibt hell. Erst nach erfolgreicher Initialisierung 
verschwindet der Balken.

Wie sieht das bei Dir aus?

von Stefan (Gast)


Lesenswert?

Nochwas: Berührt das Gehäuse des Quarz die Platine? Schiebe ein Stück 
Papier dazwischen.

von Thomas D. (thomasderbastler)


Lesenswert?

Ja von einer Seite ist Pony braucht etwas gewöhnungsbedürftig. Arbeite 
schon länger damit, ich glaube , habe bisher max 2 oder 3 AVRs verfused.

Klaro lege ich keine 8V an AVR an...da ist doch ein 7805 verbaut.

Stefan schrieb:
> Wie sieht das bei Dir aus?

"zeigen in nicht-initialisiertem EINEN
grauen Balken an (also ob der Kontrast schlecht eingestellt sei). Die
andere Zeile bleibt hell."

Genauso Zeile1 sind Balken, Zeile 2 leer. ( Dieses Problem kenne ich, 
kommt auch vor, wenn die LCD evtl. falsch angeschlossen wäre ) Deshalb 
habe ich irgendwo richtung AVR getippt weil die Anschlüsse korrekt sind.

Was mich wundert, daß der Anschluss RW vom Controller gesteuert wird, 
normaleweise liegt dieser LCD Pin an GND

von Thomas D. (thomasderbastler)


Lesenswert?

Stefan schrieb:
> Nochwas: Berührt das Gehäuse des Quarz die Platine? Schiebe ein Stück
> Papier dazwischen.

Nein, das ist auch klar...( Aufbau auf dem Steckbrett teigte zu 100% das 
gleiche Problem ! )

von Thomas D. (thomasderbastler)


Lesenswert?

Könnte jemand, der sich mit C auskennt schauen, wie ist mit dem LCD 
Anschluss RW aussieht ?

Ich kenne es so, weil in Bascom RW nicht benutzt wird, also immer GND.

Zum Testen , ob grundsätzlich alles soweit OK ist, werde dieses 
Programmchen mal reinladen.

$regfile = "M16def.DAT"
$crystal = 16000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , 
Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0

Rw Alias Portc.1
Config Rw = Output
Rw = 0


Cls


Do
Locate 1 , 1
Lcd "Zeile 1"
Locate 2 , 1
Lcd "Zeile 2"
Loop

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

RW und nicht RW:

Du kannst damit das Display auslesen. Oft wird das nicht benötigt, daher 
hängt der Pin an GND (=W).

von erik (Gast)


Lesenswert?

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 ,
Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0


Jo, RS, nicht RW an PC1 (!) anschließen! Bei deinem Listing steht:
Rs = Portc.0
Im Schaltplan ist aber Portc.1 verbunden, das muss angeglichen werden.



Abblock-C 100n so dicht wie irgend möglich an +/Masse des Controllers!!!

von erik (Gast)


Lesenswert?

erik schrieb:
> Jo, RS, nicht RW an PC1 (!) anschließen! Bei deinem Listing steht:
> Rs = Portc.0
> Im Schaltplan ist aber Portc.1 verbunden, das muss angeglichen werden.

Also beides verbessern:

-am Display RS anschließen (RW kommt auf Masse wenn nicht gelesen werden 
soll, meine ich, Datenblatt gucken)

-Rs = Portc.1 (wenn es so wie im Plan oben angeschlossen ist)

von Thomas D. (thomasderbastler)


Lesenswert?

Rs ist angeschlossen an Pin 22
RW lege ich dann auf Masse.

Muss schauen ob ich meinem verfused Atmega wiederbeleben kann, ansonsten 
warten bis Reichelt nöchste Woche welche bringt.

Danke !

Gibt es noch eine andere Möglichkeit wie mit 1 Mhz an Clock1 rangehen 
den verfused AVR zu reanimieren ?
HV Programmer habe keinen.

von erik (Gast)


Lesenswert?

Thomas der Bastler schrieb:
> Gibt es noch eine andere Möglichkeit wie mit 1 Mhz an Clock1 rangehen
> den verfused AVR zu reanimieren ?

klar. wenn du noch einen zweiten controller hast, kannst du ihn so 
programmieren, dass er an einem bein immer den zustand wechselt 
(toggelt). an diesem bein liegt dann die halbe taktfrequenz an. damit 
taktest du dann den verfuseden controller.

Die Clock muss auch nicht genau 1 Mhz haben. wahrscheinlich kannst du 
mit einem astabilen multivibrator und einem emitterfolger zur 
impedanz-wandlung bereits ein brauchbares clock-signal erzeugen.

oder du baust mit einem transistor einen quarzoszillator auf, wandelst 
mit einem zweiten transistor die impedanz (wieder emitterfolger) und 
fütterst damit die clock.
dabei aber auf jeden fall auf die richtigen pegel achten (nicht zu groß 
und nicht zu klein).

du kannst auch mit vielen ttl-bausteinen (74xxyyy) einen quarzoszillator 
aufbauen, dann stimmt der pegel (hoffe, die angabe ist so richtig, bin 
hier kein fachmann, bitte geg. korrigieren).

weiß nicht, wie du bauteilemäßig ausgestattet bist. eventuell läßt sich 
ein älteres defektes gerät (radio, cd-player etc.) zur teilegewinnung 
ausschlachten.

hast du si-dioden und/oder zenerdioden um die 3 bis 5V vorrätig (zur 
signalbegrenzung)?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Thomas der Bastler schrieb:
> Gibt es noch eine andere Möglichkeit wie mit 1 Mhz an Clock1 rangehen
> den verfused AVR zu reanimieren ?

Ja, du kannst mit einem anderen AVR und Pin toggeln den Takt erzeugen 
und an XTAL1 einspeisen. Die genaue Taktfrequenz ist unwichtig, da die 
AVRs voll statisch arbeiten, allerdings darf die ISP Frequenz max. 1/4 
des angelegten Taktes sein. Das solltest du in PonyProg einstellen.

Ein externer TTL Oszillator geht da auch. Sowas findet sich ab und zu 
auf alten Mainboards und VGA Karten, darf bloss nicht flotter als 20 MHz 
sein.

von erik (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Die genaue Taktfrequenz ist unwichtig, da die
> AVRs voll statisch arbeiten,

Dann kannst du wohl auch einen trafo mit sekundär 9V o.a. nehmen und die 
ausgangsspannung über einen vorwiderstand und zwei anitparallele 
diodenreihen auf 3V begrenzen und das ganze als takt benutzen. dauert 
bei 50Hz dann zwar recht lange, bis die fuses neu geschrieben sind, 
sollte aber auch funktionieren.
wenn du dich nicht so auskennst, lieber noch mal hier nachfragen, bevor 
du das machst (wegen richtiger spannungsbegrenzung).
auf jeden fall musst du erst die masse anschließen, bevor die clock 
verbunden wird (wegen eventueller überspannungen).


ps: ein netzteil mit pulsierender gleichspannung sollte auch gehen, auf 
jeden fall muss aber die ausgangsspannung noch begrenzt/an die maximal 
zulässige CLK-spannung des Controllers angepasst werden und darf auf 
keinen fall größer sein als die reale betriebsspannung des controllers.

von Thomas D. (thomasderbastler)


Lesenswert?

Danke für die zahlreichen Vorschläge, hoffe komme ich heute dazu !

Was Bauteile anbelangt, glaube ich, recht gut ausgestattet !
Ich werde probieren, ich glaube, daß Problem war ja evtl. bei mir, wo 
ich auch mit einem 4Mhz Oszillator probiert hatte

Pin 14 - 5V
Pin 7 - GND
Pin 8 an AVR XTAL1

daß ich den ISP Frequent "unverändert" habe.

Mal gucken...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

4 Mhz ist optimal! Wie erwähnt, musst du nur noch ISP unter 1MHz 
drücken. Ich programmiere meistens mit 125kHz, da ich es nicht so eilig 
habe :-P

erik schrieb:
> Dann kannst du wohl auch einen trafo mit sekundär 9V o.a. nehmen und die
> ausgangsspannung über einen vorwiderstand und zwei anitparallele
> diodenreihen auf 3V begrenzen und das ganze als takt benutzen.

Hahaha - da musst du aber wirklich viel Zeit haben und vor allen Dingen 
ein Programmer, der mit 10Hz oder so arbeitet.

von Asko B. (dg2brs)


Lesenswert?

Vielleicht meint er die 100kHz aus einem
Schaltnetzteil  ;-)

..duckundwech...

Irgendwo hatte ich auch mal gelesen, eine Textdatei
mit lauter "U" ´s per terminalprogramm an der RS232
ausgeben, und als Takt benutzen.
Weiss aber nicht mehr wo das war.

Gruss Asko.

von Thomas D. (thomasderbastler)


Lesenswert?

Also der Atmega lebt wieder habe erfolgreich auf Quarzbetrieb geflascht. 
alles OK

Moment....

erik schrieb:
> Jo, RS, nicht RW an PC1 (!) anschließen! Bei deinem Listing steht:
> Rs = Portc.0
> Im Schaltplan ist aber Portc.1 verbunden, das muss angeglichen werden.

Im Schlatplan
ist folgendes :
RS Portc.0
RW Portc.1 ( kommt auf GND )
E  Portc.2

oder ? Demnach ist der Code hier so OK

$regfile = "M16def.DAT"
$crystal = 16000000

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , 
Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Lcd = 16 * 2
Cls

Do
Locate 1 , 1
Lcd "Zeile 1"
Locate 2 , 1
Lcd "Zeile 2"
Loop

von Thomas D. (thomasderbastler)


Lesenswert?

Irgendwo ist der Wurm drin...

Mein Programm läuft weder in der fertige Platine noch auf dem 
Steckbrett..

Um die Problematik, weiter einzugrenzen, habe das Programmchen auch 
einen MEGA8 angepasst...klar läuft auf dem gleichen LCD auf meinem 
Steckbrett.

Also muss irgendwas mit dem MEGA16 was sein.

Die LCD Anschlüsse habe nochmal durchgeklingelt bis zum MEGA16 Pins. 
Passen.
LCD ist OK, läuft mit meinem ATMEGA8 Steckbrett

von Juergen G. (jup)


Lesenswert?

Hast Du in den Fuses des m16 JTAG disabled?

Wenn nicht kommt auf PC2..7 nichts raus.

Ju

von Thomas D. (thomasderbastler)


Lesenswert?

An der JTAG Fuse mache normaleweise nichts, also Originalzustand.

Wenns so wäre, klar dan würde nicht funzen LCD DB7

von Juergen G. (jup)


Lesenswert?

Das ist der Punkt, im Mega16 ist JTAG default enabled und Du must es 
disablen damit Du die Pins als IO benutzen kannst.

von Thomas D. (thomasderbastler)


Lesenswert?

Oh...das ist aber ein guter Hinweis !!!!!! könnte dran gelegen haben...

von erik (Gast)


Lesenswert?

Thomas der Bastler schrieb:
> Oh...das ist aber ein guter Hinweis !!!!!! könnte dran gelegen haben...

Funktionierd denn jetzt alles?

von Thomas D. (thomasderbastler)


Lesenswert?

Naja, mein Mega16 zickt wieder rum....

Konnte einmal auslesen, die Fuses waren zu dem Zeitpunkt, nach dem 
setzen OK

Also CKSEL alle demarkiert. sowie SUT0 und SUT1 also passte. danach habe 
ich mein testprogramm reingeladen ging , von flashen her ja, aber das 
Programm lief nicht.JTAG war also noch im Originalzustand, also kann 
keine LCD Ausgabe erfolgen weil DB7 nicht geht.

Seitdem kommt ich wieder nicht ran. Muss meinen 1 MHz wieder 
anschliessen.

Habe momentan zur Seite gelegt, ich bräuchte für Heute mal ein 
Erfolgserlebnis. Habe meinen MEGA8 für ein Audio Projekt, mit LCD 
erfolgreich geflasht und getestet.

Ich warte bis nächste Woche bis frisch Fleisch von Reichelt kommt.

Dann werde ich mal erneut probieren. JTAG muss also "demarkiert in Pony 
sein.
Klar, bin sicher es lag daran..hoffe ich...smile..

von Thomas D. (thomasderbastler)


Lesenswert?

Nun Danke an Juergen wegen seinem Tipp, bezüglich JTAG Fuse.

Funzt alles perfekt.

von Juergen G. (jup)


Lesenswert?

Keine Ursache,

Manchmal sind es kleine Sachen die ganz grosse Freude machen.

von Thomas D. (thomasderbastler)


Lesenswert?

Vorallem, wenn man auf nette Leute trifft !
Wieder was dazu gelernt.

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.