Forum: Mikrocontroller und Digitale Elektronik Erstes "eigenes" Projekt (Binäruhr)


von Markus F. (nidhoegger)


Angehängte Dateien:

Lesenswert?

Hiho,

ich bin grad relativ stolz und froh, denn mein erstes "eigenes" Projekt 
ist fertig, bzw funktionsfähig (möchte noch div. sachen implementieren).

Es handelt sich um eine AVR Binähruhr.

Ich habe zuerst nur die von Markus Lelie nachgebaut 
(http://www.lelie.de/markus/show.php?thema=15), habe mich aber 
entschlossen, dass mir div. funktionen fehlen oder mir nicht gefallen. 
Drum hab ich das mal kurzerhand angepasst. bisher frei schnauze mit 
eigenem Schaltplan (gezeichnet), ich kann aber auf wunsch gerne Eagle 
Files erstellen (aber kein Layout, da ich nicht ätze kann ich das noch 
nicht, ich löte (noch) auf lochraster).

Also zuerst wie gesagt, die von Markus Lelie, da hab ich mir dann 
angeschaut wie das so im einzelnen funktioniert.

Nachgebaut hab ichs etwas anders. Ich hab keinen INT0_INT1_RESET_SW, 
dafür habe ich je einen Taster an die Ports PD0-PD3 geklemmt, je mit 
einem PullUp Wiederstand (10kOhm). Die LED anordnung habei ch noch 
angepasst und die Controll LED weggelassen (gefällt mir irgendwie nicht 
o_O, ich habe an die stelle die selbe gepflanzt wie beim anderen, damit 
die 3 Gruppen gleich aussehen).

Dann habe ich die Software komplett neu geschrieben.

Ich stelle den Quelltext hier rein und vorweg:
Ich freue mich über kritik, gute und schlechte, über feedback und über 
hinweise bishin zu vorschlägen, aber bitte bitte bitte...das ist mein 
erstes projekt, sicherlich wird der ein oder andere beim code die nase 
rümpfen, das kann er gerne machen, nur bitte keine unpassenden 
kommentare posten, wie "lern erstmal coden du n00b" oder "so schlechten 
code hab ich noch nie gesene". kritik OK, aber auf den code achten.

Also was bisher gemacht ist:

Die Uhrzeit wird angezeigt und läuft mittels Timer weiter.
Die LEDs werden per Multiplexing angezeigt
Wenn Taster 0 gedrückt (und gehalten wird) kommt man in den 
Uhrstellmodus, dann sind Taster 1 - 3 je für Stunde, Sekunde und minute, 
die uhr sollte währenddessen eigentlich stillstehen, tut sie aber nicht, 
warum weiß ich noch nicht, ich suche noch.

Wird nur Taster 2 betätigt, dann kommt man in den Demomode, bisher ist 
nur ein Demomode eingebaut. Mehrere kommen, aber das ist mir nicht das 
wichtigste.

Was noch kommt:
Mehr demomodes :P Spielereien müssen einfach sein
Glimmmodus über Taster 2 und 3 einstellbar (wenn setmode nicht gedrückt 
wird), damit kann man in bestimmten zyklen vom multiplexing die nicht 
angesteuerten LEDs auch ansteuern, damit sollten sie dann leicht 
glimmen, ist für nachts vielleicht gut.

Was ich an der Hardware noch machen werde:
Einen Tag und Nacht modus. Entweder über einen schalter oder über ein 
Lichtempfindliches bauteil, weiß nur nich wie das heißt (aber mein 
radiowecker daheim hats um das display zu dimmen wenns dunkel wird). Da 
soll im prinzip nur zwischen vorwiederständen für die LEDs umgeschaltet 
werden, wenn es dunkel wird, damit die LEDs nicht so hell sind.

So nun viel Spaß mit dem Quellcode und dem hexfile.

P.S.: Man kann das hexfile auch auf die uhr von Markus Lelie 
draufmachen, allerdings fehlen einem dann die schalter und ich weiß 
nicht wie sich das ohne pullup wiederstand verhällt.

MfG

von Gast (Gast)


Lesenswert?

Es gibt lichtabhängige Widerstände, so genannte LDRs..
Wenn du den am µC analog misst, kannst du die Helligkeit rauskriegen ;)

von Markus F. (nidhoegger)


Lesenswert?

Danke, genau nach sowas hab ich gesucht. wenn ich mich im tutorial nicht 
verlesen hab ist das mit dem ATMega8 sogar möglich. Sollte doch über den 
Analog Comparator möglich sein, oder täusche ich mich da? Müsste man 
halt etwas mit dem LDR spielen, aber sollte gehen

von Alex (Gast)


Lesenswert?

Also folgende Vorschläge:


 Zur Zeit benutzt du einfach nur einen Timer mit Prescaler. Eine höhere 
Präzision kann man meißt erreichen indem man zusätzlich zum Quarz noch 
ein weiteres Uhrenquarz (ich glaube 32khz) nimmt, das seperat zu 
Overflows je Sekunde führt.

 Glimmende LEDS? Mich stört Licht nachts eher

 Umso besser finde ich die Idee mit den Lichtern die Nachts dunkel 
sind!!! Von sowas habe ich bisher noch nicht gehört.

 Aber ganz ehrlich, es ist eine UHR, da kann man ja so ziemlich davon 
ausgehen wann es Nacht ist, wenn die gestellt ist. (Einfach zwischen 
22-6 Uhr dimmen?)

Das Dimmen der LEDS über einen Vorwiderstand ist unnötiger Aufwand, 
Stichwort Pulsweitenmodulation. Ist bei LEDS auch viel schöner.

In eigener Sache: Was hast du als Gehäuse genommen? Soll ja auch schick 
aussehen.

von Markus F. (nidhoegger)


Lesenswert?

Hi,

also das gehäuse ist momentan noch in arbeit. Aber ich werde wohl ein 
Plexiglasgehäuse bauen, da ich noch plexiglas daheim habe. Die LEDs 
werde ich durch das glas durchstecken (5mm dick), dann mal schaun obs da 
vielleciht einen schönen effekt gibt. die ecken dann eventuell noch so 
abschleifen, das das licht "um den ganzen würfel" (oder w4elche form 
auch immer) reflektiert wird.

Ebenso hatte ich mir überlegt einen holzrahmen zu bauen und das ding an 
die wand zu hängen.

Ich habe die taster extra für solche fälle abnehmbar gemacht (braucht 
man ja nicht dauerhaft, sind auf ner extra platine mit 
platinensteckverbinder) und die LEDs sind auch auf ner separaten 
platine. Also bin ich da völlig frei was ich machen will.

WEnn ich dir uhr wirklich zwischen 22 und 6 uhr dimmen will, brauch ich 
auch 4 weitere ausgänge, die dann einen anderen vorwiederstand haben. 
Damit brauch ich dann 4 weitere Transitoren, etc, ich denke da ist die 
variante mit einem Schalter besser.

Was mir nun auchnoch eingefallen ist, was ich noch machen werde: Einen 
kleinen wecker integrieren und mit einem piezo dann den weckton erzeugen 
(wie der aussieht schaumer mal).

Auf die Idee mit dem dImmen bin ich btw wirklich durch meinen "normalen" 
wecker gekommen, der hat ein kleins Lichtempfindliches bauteil, damit 
stört er nachts nicht wenn man mal draufgucken will (hat dann die 
perfekte helligkeit)

Wo schließe ich denn das Uhrenquarz an? Ich weiß nicht wie das geht, bin 
noch neu in der µC welt :D

von Sebastian B. (sfreak) Benutzerseite


Lesenswert?

Markus Foitschik schrieb:
> WEnn ich dir uhr wirklich zwischen 22 und 6 uhr dimmen will, brauch ich
> auch 4 weitere ausgänge, die dann einen anderen vorwiederstand haben.
> Damit brauch ich dann 4 weitere Transitoren, etc, ich denke da ist die
> variante mit einem Schalter besser.

Brauchst du nicht. Die Idee bei PWM ist die LEDs einfach so oft ein und 
aus zu schalten das das Auge es nicht mehr wahrnimmt. Die Helligkeit 
laesst sich dann einfach ueber das Verhaeltnis von Ein- zu Ausschaltzeit 
festlegen. Alles ueber den selben Ausgang am Controller.

http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM
http://www.mikrocontroller.net/articles/Pulsweitenmodulation
http://www.mikrocontroller.net/articles/Soft-PWM

von Markus F. (nidhoegger)


Lesenswert?

Ah danke, das werd ich mir doch wohl mal anschaun :P. So lernt man immer 
wieder was dazu :D

Ne frage hätt ich noch. Ich seh grade die uhr läuft nicht richtig, also 
hat schon einen deutlichen unterschied zur uhrzeit auf dem wecker.

Wie errechne ich den Timer, damit eine sekunde um ist?

Ich weiß leider nichtmehr wie ich auf diese 16 interrupts gekommen bin 
(in meiner Rechnung kam soweit ich weiß ca 15,6 interrupts raus)?

Kann ich da nicht machen in dem ich die Timerdurchläuft auf 100zyklen 
beschränke? oder wie rechnet man das generell?


Und zum PWM: Ein ausschalten tu ich ja jetzt schon ;) Im der mainloop 
eben.

Aber das Hardware PWM scheint ja wegzufallen, da der ATMega8 nur 2 
outputs für PWM hat, ich bräuchte aber 4 ;).

Naja dann werd ich mir morgen mal das Soft-PWM anschaun, das geb ich mir 
heute nacht nichtmehr :D

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> So lernt man immer wieder was dazu :D
Noch was zum selben Thema...

> ... vorwiederstand ... PullUp Wiederstand ... wiederstand ...
Es sind Widerstände, die dem Stromfluss widerstehen.
Sie heißen nicht nur so, weil sie wieder stehen.
Das ist sonst fast so, wie wenn ein Heizungsbauer dauernd von einer 
Umweltspumpe sprechen würde  ;-)

von Karl H. (kbuchegg)


Lesenswert?

Markus Foitschik schrieb:

>
> Ne frage hätt ich noch. Ich seh grade die uhr läuft nicht richtig, also
> hat schon einen deutlichen unterschied zur uhrzeit auf dem wecker.
>
> Wie errechne ich den Timer, damit eine sekunde um ist?
>
> Ich weiß leider nichtmehr wie ich auf diese 16 interrupts gekommen bin
> (in meiner Rechnung kam soweit ich weiß ca 15,6 interrupts raus)?
>
> Kann ich da nicht machen in dem ich die Timerdurchläuft auf 100zyklen
> beschränke? oder wie rechnet man das generell?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr

>
> Aber das Hardware PWM scheint ja wegzufallen, da der ATMega8 nur 2
> outputs für PWM hat, ich bräuchte aber 4 ;).

Man kann eine PWM auch rein in Software machen.

von MagIO (Gast)


Lesenswert?

Und dann könntest du ja noch einen Funkuhrenempfänger einbauen.

von Markus F. (nidhoegger)


Lesenswert?

dazu muss ich mich erst mehr damit befassen, wie das alles funktioniert 
;) wie gesagt bin noch in den anfängen. wenn die binäruhr nu alles drin 
hat was ich will hab ich vor ein Game of Life auf nem 16x16 LED Board 
komplett selbst zu entwickeln...sollte ja mit 4 Ports möglich sein...

von Obi (Gast)


Lesenswert?

Hallo,
ich wollte mal fragen ob du den Schaltplan online stellst :)
wer echt super von dir !!!

Die Uhr von den Link habe ich schon gebaut und diese hat bei mir eine 
Abweichung von 1 Std. am Tag !!!

Da ich mit Assembler gar nicht klar komme wollte ich halt deine mal 
bauen ;)

LG Obi

von PIC N. (eigo) Benutzerseite


Lesenswert?

Die Zeitbasis ist doch sicherlich in der Software einstellbar?

von Obi (Gast)


Lesenswert?

ja aber ich habe doch kein Plan von Assembler :(
deswegen kann ich das nicht anpassen etc.

LG

von Spess53 (Gast)


Lesenswert?

Hi

Falscher Quartz?  Du brauchst 4,194304MHz.

MfG Spess

von PIC N. (eigo) Benutzerseite


Lesenswert?

Falscher Quarz, bedingt. Wäre aber durchaus sinnvoller.

von Obi (Gast)


Lesenswert?

na ich hab den benutzt den er in seinen Schaltplan eingezeichnet hat 4,0 
MHz

der iss Falsch ? wenn ja :(

LG

von Heiko (Gast)


Lesenswert?

Nerd

von Spess53 (Gast)


Lesenswert?

Hi

>der iss Falsch ? wenn ja :(

Nach meiner Rechnung, ja.

MfG Spess

von Obi (Gast)


Lesenswert?

(at) Heiko

Tolle Antwort Respekt bist einer der alles kann nich wa wenn ich mal 
Probleme hab werde ich mich sofort bei dir melden !!!

(at)all
kann man nicht die soft anpassen ? und wenn ja könnte mir da einer 
helfen ?
wer euch sehr Dankbar weil die Uhr auseinander nehmen iss schlecht (iss 
verbaut) nur der ISP liegt frei !

LG

von Spess53 (Gast)


Lesenswert?

Hi

Der Atmega8 hat auch einen 16-Bit-Timer. Mit Vorteiler 256 und einem 
Compare-Wert von 0x3D08 kannst du einen Interrupt im Sekundentakt 
erzeugen.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Obi schrieb:
> ja aber ich habe doch kein Plan von Assembler :(

Dann lerns.
So viel braucht man nicht um eine Uhr hinzubekommen.
Ausserdem hast du ja eine Vorlage sprich ein Programm das prinzipiell 
funktioniert.

WEnn du nur an der Uhr interessiert bist, dann kauf dir eine.
Ist deutlich einfacher und lernen brauchst du auch nichts (ausser das 
bischen Chinesisch um sie einzustellen)

von Obi (Gast)


Lesenswert?

(at)Mod

Ahh ja alles klar von einen Mod hätte ich mehr erwartet habe selber 2 
Boards die ich verwalte aber sowas hab ich da noch nie geschrieben !!!

Ich gehe mal davon aus wenn du in Indien Urlaub machst lernst du auch 
erstmal die Sprache obwohl du englisch kannst oder kaufst du dir ein 
Dolmetscher ?

(at)all
Ich danke euch erstmal für eure Hilfe
Ich blicke in Assembler nich durch
und damit ich mir so ein scheiss von div. Leuten weiter ansehen muss 
such ich im Netz nach einen anderen Forum wo die Mods. freundlicher sind 
(auch wenn mutti ihn nicht ran lässt)
Sorry
LG

von Spess53 (Gast)


Lesenswert?

Hi

>> ja aber ich habe doch kein Plan von Assembler :(

>Dann lerns.

Es ist aber C.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Obi schrieb:

> Ich gehe mal davon aus wenn du in Indien Urlaub machst lernst du auch
> erstmal die Sprache obwohl du englisch kannst oder kaufst du dir ein
> Dolmetscher ?

In Indien kommt man English sehr gut über die Runden.
Und wenn mir ein Inder den Weg zeigen will, dann stell ich mich auch 
nicht hin und lametiere dass ich nicht Indisch kann sondern ich überleg 
mir vorher wie weit ich mit meinen Sprachkentnissen im Falle eines 
Falles komme.
Und ja, ein paar Brocken der jeweiligen Landessprache der Länder in 
denen ich bisher war, kann ich immer. Zumindest soviel um einfache Dinge 
wenigstens dem Prinzip nach verstehen zu können.


Entweder du willst etwas selber bauen oder du willst es nicht.
Aber wenn du willst, dann musst du dich auch damit beschäftigen.

Indem man vorgefertigte Flächen mit Farbe ausmalt, lernt man nicht was 
es ausmacht ein Bild zu malen.

von STK500-Besitzer (Gast)


Lesenswert?

>(at)all
>Ich danke euch erstmal für eure Hilfe
>Ich blicke in Assembler nich durch
>und damit ich mir so ein scheiss von div. Leuten weiter ansehen muss
>such ich im Netz nach einen anderen Forum wo die Mods. freundlicher sind
>(auch wenn mutti ihn nicht ran lässt)
>Sorry
>LG

"LG" und dann solch böse Wörter... passt nicht.
Mancher ist halt lernresistent.

von Karl H. (kbuchegg)


Lesenswert?

Spess53 schrieb:
> Hi
>
>>> ja aber ich habe doch kein Plan von Assembler :(
>
>>Dann lerns.
>
> Es ist aber C.


Er meint den externen Link im ersten Posting.
Und weil die Uhr, die er nach diesem Link nachgebaut hat, zu langsam 
geht, baut er lieber eine 2.te Uhr auf, anstatt
* sich die vorhandene Hardware anzusehen und in C selber eine
  Uhr zu schreiben (sofern es überhaupt stimmt, dass er wenigstens
  irgendeine Sprache programmieren kann. In seinem Indien Posting hat
  er wenigstens so etwas anklingen lassen)
* soweit Assembler und die Grundlagen zu lernen, dass er den Fehler
  in der breits gebauten Uhr beheben kann. So schwer ist das nicht.


Sorry. Aber dafür hab ich wirklich kein Verständnis. Das das eine oder 
andere Detail einem nicht so einfach in den Schoss fällt ... geschenkt. 
Aber alles einfach mit einem kategorischen "Ich kann nicht Assembler" 
abzuschmettern, ist eine ganz andere Sache. Ich hab mir den Code 
angesehen. So schwer ist der nicht zu verstehen, wenn man ein wenig 
programmieren kann (egal in welcher Sprache) und vor allen Dingen seinen 
AVR zumindest ein bischen kennt.

von Obi (Gast)


Lesenswert?

(at) Spess53

Danke ich habs hin bekommen du hast mir den richtigen denk Anstoß 
gegeben !!!
hab den quelltext nochmal studiert und auf div. seiten gelesen um zu 
verstehen was welcher befehl in assembler macht und nun hab ich den Wert 
geändert (15625) und nun läuft sie sync.

den denk Anstoß habe ich bekommen als ich das gelesen hab und das mal in 
ruhe 2 Std.später verinnerlicht hab .

" Der Atmega8 hat auch einen 16-Bit-Timer. Mit Vorteiler 256 und einem
Compare-Wert von 0x3D08 kannst du einen Interrupt im Sekundentakt
erzeugen. "

nochmal Big Thx für dein schupser in die richtige Richtung

(at)all

trotz allen würde ich gern die Uhr von Markus F. bauen und das hat nix 
damit zu tun das ich die erste Uhr von M.L. erst nicht hin bekommen habe 
sondern weil ich halt gern noch eine 2te hätte die mehr funktionen hat 
und an der ich selber was Prog. kann .

Mir auch egal ob sich hier wieder einer lustig macht oder so was 
intelligentes ab lässt wie NERD NOOB etc.

Schönes Rest WE

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.