Forum: Mikrocontroller und Digitale Elektronik Problem mit einer µC UHR basierend auf ATTiny2313


von Christian S. (christian_s34)


Lesenswert?

Guten Abend allerseits.

Das mein erster Post gleich eine Frage ist (hoffentlich nichts zu 
dämliches), bitte ich zu verzeihen. Ich werde das Forum auch nicht nur 
als Fragekasten missbrauchen, versprochen ;-)

Zuerst sei gesagt, dass ich leider keinerlei Erfahrung mit 
Mikrokontrollern habe. Ich habe schon zwar ein paar Schaltungen 
aufgebaut (XBox USB NAND Flasher und PS3 Jailbreak Dongle), da war aber 
eigentlich schon alles soweit fertig vorgegeben. Aber Platinen entwerfen 
und ätzen habe ich dabei gelernt. Unklare Ausführungen und eventuell 
dumme Fragen bitte ich zu entschuldigen, ich habe immer erst versucht, 
selber zu Suchen und zu Finden. Auch ist meine Beschreibung hier 
ellenlang, aber nur so gebe ich euch die Möglichkeit, sinnvoll über mein 
Problem nachzudenken.

Mein Problem ist folgendes: Ich möchte eine einfach Uhrenschaltung mit 
einem ATTiny2313 aufbauen. Ziel ist es, eine Uhr zu haben, die pro Tag 
nicht 24 sondern 32 Stunden vergehen lässt. Generell soll das ganze ein 
Replikat der folgenden Vorlage sein: 
http://blackstrom.derschwarz.de/avr/avr_uhr/index.shtml
Ich habe das ganze allerding ohne das ISP-Element gebaut, da ich den µC 
in einem selbstgebauten Programmer beschreiben wollte.

Programmiertechnisch ist das mit den 32 anstatt 24 Stunden kein Problem, 
ich muss ja nur die Load_timer Konstante ändern (auf ¾ des aktuellen 
Wertes) und die Stundenzählroutine umschreiben, dass bis 32 hochgezählt 
wird, nicht nur auf 24. Hab ich noch nicht gemacht, sollte aber kein 
Problem sein.

Ich habe aber momentan ein Problem mit der Schaltung an sich. Ich habe 
das ganze aufgebaut, und es funktioniert auch, leider nur teilweise. Das 
Programm (unveränderte 24-Stunden Version) habe ich mit PonyProg (ja, 
schlecht, ich weiß) auf den µC geladen, kein Problem. Wenn ich den µC in 
die Schaltung einsetze und eine Spannung anlege, dann wird nichts 
angezeigt. Drücke ich allerdings einen der Taster zum Einstellen von 
Stunde bzw. Minute, dann leuchten die 7-Segment-Anzeigen auf und 
entweder Stunde oder Minute zählen hoch. Flimmert zwar stark, aber 
funktioniert. Solange bis ich die Taste loslasse, dann sind wieder alle 
Segmente aus.

Fazit bis hier:
-Programm scheint auf µC richtig hochgeladen worden zu sein
-Strom richtig angeschlossen
-Anzeigeelemente richtig angeschlossen (vorher auch überprüft)
-Taster richtig angeschlossen
=> Ergo: Probleme mit dem Quarz

Das Problem ist, das ich einen Quarz mit 2 Beinchen habe, keinen 
Quarzoszillator mit 3 Beinen. Hatte den erst so verwendet wie den 
Oszillator, also ein Bein an +5V, eins an XTAL1. Dass das nicht 
funktionieren kann, habe ich schnell herausgefunden.

Sollte ja auch kein Problem sein, wenn man diesen zwischen XTAL1 und 
XTAL2 setzt, dann von jedem Quarzbein jeweils noch einen Kondensator 
Richtung Grund und gut ist.
Testen konnte ich das leider nur mit 100nF Kondensaturen, 22pF wie 
empfohlen habe ich grade nicht da.

Weitere Alternative: Testen mit einem Keramikresonator.
Hatte grade noch welche mit 12MHz da, zu schnell aber zum Troubleshooten 
hoffentlich egal, läuft die Uhr halt drei mal so schnell. Laut 
Produktdatenblatt das erste Bein an XTAL2 (Input), das zweite an Gnd, 
das dritte an XTAL1 (Output).
=> Das gleiche wie mit dem falsch angeschlossenen Quarz

Nächster Schritt: Testen, was die Schaltung ohne angeschlossene 
„Peripherie“ an XTAL1 und XTAL2 tut. Ergebnis: Genau das gleiche wie 
bisher
=>Es muss etwas mit dem Taktgeber nicht stimmen.

Weiter nachgelesen, erste Infos zu CKSEL-Werten erhalten. Nachgeschaut, 
auf dem µC war 0100 eingestellt, also default. Dass er dann ignoriert, 
was ich an den XTALs veranstalte ist klar. Aber sollte er dann nicht mit 
dem internen Taktgeber von 8MHz (bzw 1MHz wenn CKDIV8 aktiviert ist) 
arbeiten?

Daher hier meine Frage(n):
1.) Hätte die Schaltung nicht trotzdem mit dem internen Taktgeber 
funktionieren sollen (Ungenauigkeiten und falsche Taktrate mal außen 
vorgelassen)?
2.) Enthalten die HEX-Dateien schon Einstellungen für die CKSEL-Werte? 
(Ich hatte früher schon PICs mit WinPic800 beschrieben, der hatte sich 
immer alle Einstellungen individuell pro HEX-Datei gemerkt, daher frage 
ich)
3.) Welche CKSEL-Werte hätte ich setzen sollen, wollte ich das ganze 
noch mal erst mit dem Keramikresonator bzw. dem Quarz testen?
Kann ich leider nicht mehr, habe eine Sache mit den CKSELs ausprobieren 
wollen, die ich für die richtige gehalten habe, war aber wohl falsch. 
Komme nun mit dem Programmer nicht mehr in den µC und muss erstmal einen 
passenden Taktgeber á la 
Beitrag "Re: External Clock ATTiny26" besorgen).
Was habe ich eventuell verbockt, daß die Schaltung zwar teilweise 
funktioniert, aber nicht ganz?


Vielen Dank schon mal für eure Ratschläge.

von Hc Z. (mizch)


Lesenswert?

Christian S. schrieb:
> 1.) Hätte die Schaltung nicht trotzdem mit dem internen Taktgeber
> funktionieren sollen (Ungenauigkeiten und falsche Taktrate mal außen
> vorgelassen)?

Ja.  Schon allein die Tatsache, dass Du flashen konntest, zeigt, dass Du 
einen Takt hast.  Wenn das Programm trotzdem nicht lief und Flashen + 
Verify OK war, hilft nur die Suche nach der Ursache, im Programm und in 
der Hardware.

> 2.) Enthalten die HEX-Dateien schon Einstellungen für die CKSEL-Werte?

Nein.  .hex ist ausschließlich Flash-Inhalt.

> 3) 3.) Welche CKSEL-Werte hätte ich setzen sollen

Die müsste ich mir auch erst mal aus dem Datenblatt heraussuchen. 
Versuch's doch erst selbst, und wenn Dir ein Merkmal unklar ist, kannst 
Du ja gerne nachfragen.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

So, wie ich das verstanden habe, läuft der AVR, zumindest bei 
Tastendruck irgendwie. Ohne irgendeinen verwendbaren Takt, sollte das 
nicht sein, daher würde ich mal den Quarz ausschließen. Um's erstmal 
an's Laufen zu bekommen, sollte auch der interne Resonator ausreichen 
(CKSEL auf 0011 oder 0010 für ca. 4MHz).

Das, was du nachbaust war aber für den AT90S2313 entwickelt und nicht 
für den Tiny2313, gerade bei den Timern gibt es Unterschiede. Wenn du 
die Software einfach übernommen hast, wird diese die falschen 
IO-Register beschreiben und nichts funktioniert mehr, wie es soll. Der 
90S2313 hatte bspw. nur TCCR0, der Tiny2313 hat TCCR0A+B, das müsste 
dann wohl angepasst werden.

von Christian S. (christian_s34)


Lesenswert?

@Mark:

Danke für den Hinweis, das ganze war mir komplett entgangen, da ich 
AT90S2313 bei Reichelt eingegeben habe, aber als Ergebnis nur der 
ATTiny2313 kam. Da wird wohl der Hund begraben liegen, denn die 
Schaltung sollte (bis auf den Quarz) fehlerfrei sein.

Wenn ich das Programm neu kompiliere, muss ich dann nur "$regfile" und 
die Ports passend auf den ATTiny2313 ändern? Andere Chip-Spezifische 
Variablen/Deklarationen scheint das Programm ja nicht zu haben.

Muss mich da dann noch mal was mehr reinlesen, aber danke schonmal ;-)

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Gern geschehen.

Christian S. schrieb:
> Wenn ich das Programm neu kompiliere, muss ich dann nur "$regfile" und
> die Ports passend auf den ATTiny2313 ändern?

Die Ports dürften geblieben sein, aber die Einstellbits für den Timer 
sind vermutlich anders, evtl. muss halt noch ein zweites Byte 
eingestellt werden(aus TCCR0 wird TCCR0A+TCCR0B). Wenn du in den 
Datenblättern die Angaben zu den Timer-Control-Registern vergleichts, 
siehst du die Unterschiede.

von Christian S. (christian_s34)


Lesenswert?

@Mark: Werde ich mir morgen mal anschauen. Danke nochmal.

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Hallo.

Es gibt von Atmel eine Application Note zu deinem Fall: 
http://www.atmel.com/dyn/resources/prod_documents/doc4298.pdf

Für dein erstes Projekt bist du schon weit gekommen, also lass den Kopf 
nicht hängen.

Viel Erfolg,
Christian

von Mente F. (attiny_fan)


Lesenswert?

Hallo

Ich habe genau diese Schaltung nachgebaut und hatte das gleiche Problem 
mit dem flackern.

ich habe den mit dem programm (myAVR Workpad PLUS Demo) verwendet ist 
ein gratis programm auf deutsch.

Dort musste ich die Fuse seiten und nahm den hacken bei (Divide clock 
bei 8 internally) den hacken rausnehmen und dan noch den externen 
Oszillator mit 4MHz anwählen dan gings.

Vieleicht ist das bei deinem Programm anderst. Mit welchem Programierst 
du den?

Ich habe auch den ATTiny2313 genommen.

hoffe konnte einwenig helfen

von Christian S. (christian_s34)


Lesenswert?

@Fabian:
Danke für das Aufgreifen des doch schon etwas älteren Threads. Leider 
stecke ich momentan mitten in einem Umzug, daher habe ich die Bastelei 
leider etwas zurückstellen müssen. Hast du quasi das komplett gleiche 
Problem wie ich (also das die Uhr nichts anzeigt, und das starke 
Flackern beim einstellen der Zeit), oder nur das Flackern (dann 
permanent)?

Ich hatte in Ermangelung weiterer Vorkenntnisse einfach mal mit PonyProg 
programmiert und hatte mir dazu eine passende Schaltung gebaut.

Werde das ganze aber auf jeden Fall nochmal überprüfen sobald ich meinen 
Bastelkrams wieder beisammen habe.

Danke schonmal, werde hier wieder berichten, sobald ich mehr weiß ;-)

von Mente F. (attiny_fan)


Lesenswert?

hallo

bei mir war nur das mit dem Flakern aber das mit dem nichts anzeigen 
verstehe ich nichts.

Ich habe es mit bascom gemacht Pony prog kenne ich leider nicht

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.