Forum: Mikrocontroller und Digitale Elektronik Binär Uhr Selbst Bauen


von Maudi (Gast)


Lesenswert?

Hallo,
Ich möchte eine Uhr bauen die mir die Zahlen in einem Binärsystem 
ausgibt. Und wollte Fragen
-welchen Mikrocontroller benutzt man am besten
-brauch man über haupt einen
-in welcher Sprache macht man das am besten (habe schon kleine Erfahrung 
in C++)

Danke =)

von Ben ■. (bloxx)


Lesenswert?

Ich würd mal sagen:

http://www.elv.de/binaer-uhr-bu-1-komplettbausatz-mit-frontplatte-ohne-dcf-modul.html

Da braucht man sich überhaupt keine eigenen Gedanken machen

■

von n8schicht (Gast)


Lesenswert?

Hallo Maudi,

frag doch mal Tante Googel nach Binäruhr und Schaltplan. Da findest Du 
Lösungen mit und ohne Microcontroller zu hauf.
In der Lehre haben wir die Uhr nur mit Logikgattern aufgebaut.
Taktgewinnung über die 50Hz aus dem Netz (per Schmitt-Trigger) und dann 
per Schieberegister zählen und an den richtigen Punkten die LEDs 
anschließen.

Gruß
N8Schicht

von Max H. (hartl192)


Lesenswert?

Maudi schrieb:
> -welchen Mikrocontroller benutzt man am besten
Irgendeinen mit >20 IOs, z.B. einen PIC18 im DIP-28 (z.B. PIC18F25k22)
> -brauch man über haupt einen
Nein, geht auch mit 47HCxxx Logik ICs
> -in welcher Sprache macht man das am besten (habe schon kleine Erfahrung
C oder ASM, da du Erfahrung mit C++ hast würde ich C sagen.

: Bearbeitet durch User
von Lars S. (pixelfreund)


Lesenswert?

Guten Tag,

da ich in der Ausbildung als Zeitvertreib auch eine Binär Uhr machen 
soll und meine Assembler Zeit schon eine Weile her ist bräuchte ich 
etwas Hilfe.
Meine Uhr soll von der Zeitausgabe auch so aussehen wie die oben von 
ELV. Nur dass ich sie mit einem atmega8535 programmieren soll. Alles 
schön und gut, wie ich die Ausgabe an die LED's mache ist auch nicht das 
Problem, aber!

Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und 
Beschaltung) ein (liegt an PB0 an) und gebe es an das Register weiter, 
dass es die Sekunden hochzählt?

Vielen Dank schon mal im voraus.

Grüße,
Pixelfreund

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


Lesenswert?

Lars S. schrieb:
> Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und
> Beschaltung) ein (liegt an PB0 an)
War das jetzt der Schaltplan?
> und gebe es an das Register weiter, dass es die Sekunden hochzählt?
Ich würde vorschlagen, dass erst mal DU etwas lieferst, dann 
beschreibst, was du damit erwartest und was nicht geht, dann kann man 
drüber diskutieren. Dann wüsste man auch, mit welcher Programmiersprache 
das Ganze abgehandelt werden soll.

> Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und
> Beschaltung) ein (liegt an PB0 an)
Wenn du schon ein fertiges 1Hz Signal hast, dann ist es doch einfach: 
Flankenerkennung am PB0 und dann das Sekunden-Register hochzählen.

> da ich in der Ausbildung als Zeitvertreib eine Binär Uhr machen soll
DU sollst sie also machen. Nicht "das Forum". Und es ist vermutlich kein 
"Zeitvertreib", sondern dein Meister will schon mal sehen, wie sich der 
Bursche da anstellt...

BTW: es ist nicht elegant, sich an andere Threads anzuhängen. Könnte ja 
sein, dass da einer (so wie ich) erst mal das ganze alte Zeug ansieht, 
nur um zum Schluss zu sehen, dass eine neue Frage gestellt wird...

von Lars S. (pixelfreund)


Lesenswert?

Lothar Miller schrieb:
> Lars S. schrieb:
>> Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und
>> Beschaltung) ein (liegt an PB0 an)
> War das jetzt der Schaltplan?
>> und gebe es an das Register weiter, dass es die Sekunden hochzählt?
> Ich würde vorschlagen, dass erst mal DU etwas lieferst, dann
> beschreibst, was du damit erwartest und was nicht geht, dann kann man
> drüber diskutieren. Dann wüsste man auch, mit welcher Programmiersprache
> das Ganze abgehandelt werden soll.

Schaltplan ist nichts besonderes, das Eingangssignal und 20 Ausgänge für 
die LED's.
Später kommt noch ein Taster zum Stellen, aber dafür sollte es erstmal 
laufen.

Zur Sprache: Steht drinne: Assembler.

>> Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und
>> Beschaltung) ein (liegt an PB0 an)
> Wenn du schon ein fertiges 1Hz Signal hast, dann ist es doch einfach:
> Flankenerkennung am PB0 und dann das Sekunden-Register hochzählen.

Danke, dass war schon mal eine Sache, an die ich nicht gedacht habe.

>> da ich in der Ausbildung als Zeitvertreib eine Binär Uhr machen soll
> DU sollst sie also machen. Nicht "das Forum". Und es ist vermutlich kein
> "Zeitvertreib", sondern dein Meister will schon mal sehen, wie sich der
> Bursche da anstellt...

Nein, daran liegt es nicht. Letzte Woche wurde das Insolvenzverfahren 
eingeleitet, es geht einfach darum, dass ich die 3 Monate noch was zu 
tun hab und net sinnlos rumsitze. Aber konntest du ja nicht wissen.

> BTW: es ist nicht elegant, sich an andere Threads anzuhängen. Könnte ja
> sein, dass da einer (so wie ich) erst mal das ganze alte Zeug ansieht,
> nur um zum Schluss zu sehen, dass eine neue Frage gestellt wird...

Hätte ich was neues geschrieben, wäre wie in so vielen Sachen gekommen 
"Nutz die Froum Suche!"
Deswegen hab ich an ein anderes Thema mich drangehängt.

Trotzdem danke schonmal für den Hinweiß, mit der Flankenerkennung.

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


Lesenswert?

Lars S. schrieb:
> Zur Sprache: Steht drinne: Assembler.
Es steht drin, dass das schon eine Weile her ist. Dass du heute den 
Assembler verwenden sollst, das könnte man nur raten...

> Später kommt noch ein Taster zum Stellen, aber dafür sollte es erstmal
> laufen.
Gleich mal einen Hinweis für den Taster:
Entprellen und dann wieder die Flankenerkennung.

Hier mal ein Pseudocode für die Flankenerkennung. Du bekommst das schon 
in Assembler umgesetzt... ;-)
1
   portpinB0 = PINB0
2
   wenn portpinB0 ungleich portpinB0alt dann   -- Pegel geändert? ja: Flanke!
3
      wenn portpinB0 = high                    -- jetzt high? ja: steigende Flanke.
4
         sekunden hochzählen
5
         wenn sekunden = 60 dann
6
            sekunden = 0
7
            minuten hochzählen
8
            wenn ...
9
10
   portpinB0alt = portpinB0                    -- Pegel merken für nächste runde

von Peter D. (peda)


Lesenswert?

Lars S. schrieb:
> Wie lese ich das 1Hz Signal über meinen Taktgeber (mit 4,194304MHz und
> Beschaltung) ein (liegt an PB0 an)

Einen Takt kann man mit einem externen Interrupt oder einem Timer 
einlesen.

Man könnte auch einfach die 4,194304MHz oder einen anderen Quarz direkt 
als CPU-Takt anschließen. Der AVR hat die Hucke voll mit Timern, die das 
runter teilen können.

Lars S. schrieb:
> und gebe es an das Register weiter,
> dass es die Sekunden hochzählt?

Das geht nicht. Zählen mußt Du in Software.
1
if( Bedingung )
2
  sekunde++;

von Harald W. (wilhelms)


Lesenswert?

Max H. schrieb:

> Nein, geht auch mit 47HCxxx Logik ICs

Interessant. Und wo findet man die? :-)

von Harald W. (wilhelms)


Lesenswert?

Lars S. schrieb:

> Hätte ich was neues geschrieben, wäre wie in so vielen Sachen gekommen
> "Nutz die Froum Suche!"
> Deswegen hab ich an ein anderes Thema mich drangehängt.

Da hast Du was missverstanden. Solche Antworten bekommst Du, wenn
Du Sachen fragst, die schon x-mal beantwortet wurden.
Wenn Du neue Fragen hast, solltest Du einen neuen Thread eröffnen
und, wenn es hilfreich ist, einen Link auf den alten Thread einfügen.
Gruss
Harald

von Max H. (hartl192)


Lesenswert?

Harald Wilhelms schrieb:
> Und wo findet man die? :-)
Bei so gut wie jedem Elektronikhändler, z.B.:
TME, Reichelt, Farnell, Conrad, Mouser, RS Components,...

von Lars S. (pixelfreund)


Lesenswert?

Mit den TTL Bausteinen und mit CMOS Bausteinen haben wir das in der 
Firma schon gemacht, aber nie mit nem µC. Deswegen soll ich das halt 
jetzt mal mit einem machen.
Ich würde da aber eine CMOS Version bevorzugen, da diese einfacher ist.
Schaltpläne habe ich gerade keine zur Verfügung, kann aber bei bedarf 
danach suchen.

von Max H. (hartl192)


Lesenswert?

Lars S. schrieb:
> Ich würde da aber eine CMOS Version bevorzugen, da diese einfacher ist.
Man muss kein Programm schreiben, aber die Schaltung wird mit µC 
wesentlich einfacher. Das µC Programm für eine einfache Binäruhr sollte 
auch kein Hexenwerk sein.

Wenn ich eine Binäruhr bauen müsste würde ich sie so aufbauen:
https://www.mikrocontroller.net/attachment/214613/Binaeruhr.pdf

von Lars S. (pixelfreund)


Lesenswert?

Das CMOS bevorzugen war auf den vergleich TTL/CMOS bezogen.


So ähnlich ist meine auch, nur dass ich die Zahlen getrennt habe, also

x|0  x|0  x|1
x|1  1|1  0|0
0|0  0|1  0|0
1|1  0|0  0|1

15:46:09 Uhr

aber das macht nicht so den großen Unterschied.
Am Programm bin ich gerade dran, habe aber aktuell immernoch nur 
Bruchteile.
Für heute ist eh erstmal Schluss. Ich schreibe morgen nochmal.

von Patrick B. (p51d)


Lesenswert?

Andere Idee:
Dein 1Hz Signal auf einen InputCapture und dann intern gleich den Zähler 
verwenden.
Entweder nimmst du diesen nur für die Sekunden oder du schaust gleich, 
dass du einen 32Bit erwischst, dessen Maximum du auf 86399 beschränkst. 
So hast du gleich einen ganzen Tag und musst den Zählerwert nur noch 
entsprechen maskieren, dividieren und dann an die LEDs ausgeben.

von Harald W. (wilhelms)


Lesenswert?

Max H. schrieb:
> Harald Wilhelms schrieb:
>> Und wo findet man die? :-)
> Bei so gut wie jedem Elektronikhändler, z.B.:
> TME, Reichelt, Farnell, Conrad, Mouser, RS Components,...

Dann gib doch mal D e i n e  Bezeichnung bei google ein. :-)

von Max H. (hartl192)


Lesenswert?

Harald Wilhelms schrieb:
> D e i n e
Wenn wir auf diesem Niveau sind, wofür stehen diese 5 einzelnen 
Buchstaben?

: Bearbeitet durch User
von npn (Gast)


Lesenswert?

Max H. schrieb:
> Wenn wir auf diesem Niveau sind, wofür stehen diese 5 einzelnen
> Buchstaben?

Ooooch, jetze isser beleidigt. Smilies von Harald nicht gesehen?

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


Lesenswert?

Patrick B. schrieb:
> Andere Idee:  Dein 1Hz Signal auf einen InputCapture und
> dann intern gleich den Zähler verwenden.
Das wäre mal echt technischer Overkill. Ich würde sagen, ein Anfänger 
tut sich am Anfang leichter, wenn er das Problem mit ein paar Zeilen 
Quelltext erschlagen kann. Dann ist es nämlich auch einfach simulierbar.

Und bei Events, die im Sekundentakt anfallen, sollte das Behandeln der 
Aufgabe in einer einzigen Schleife kein Problem sein....

von Max H. (hartl192)


Lesenswert?

npn schrieb:
> Ooooch, jetze isser beleidigt. Smilies von Harald nicht gesehen?
Verdammt, meine Smilies vergessen :-(

von npn (Gast)


Lesenswert?

Max H. schrieb:
> Verdammt, meine Smilies vergessen :-(

Ok, alles wieder gut :-)

von Harald W. (wilhelms)


Lesenswert?

Max H. schrieb:

> Harald Wilhelms schrieb:
>> D e i n e
> Wenn wir auf diesem Niveau sind, wofür stehen diese 5 einzelnen
> Buchstaben?

Hast Du immer noch nicht gesehen, auf was ich hinaus wollte?

von Max H. (hartl192)


Lesenswert?

Kleiner Zahlendreher, na und? Bis jetzt hat aber anscheinen noch jeder, 
außer dir, verstanden was ich sagen wollte.

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Max H. schrieb:

> Kleiner Zahlendreher, na und?

Nun, aber da hier ja wohl ein Anfängeder gefragt hat, würde
der sich mit google totsuchen.

von Lars S. (pixelfreund)


Angehängte Dateien:

Lesenswert?

Ich hab mal was ausprobiert und wollte mal wissen, ob der Code 
wenigstens richtig ist.

Noch ohne Ausgabe an die LED's über PORT A/C/D.

In dieser Version auch ohne den Quarz, sondern mit warten.

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


Lesenswert?

Lars S. schrieb:
> ob der Code wenigstens richtig ist.
Da ist kein Code. Da ist nur eine Textdatei.
Oder andersrum: menn deine Assemblerfiles einfach*.asm. Du wirst 
staunen...

> ob der Code wenigstens richtig ist.
Sicher nicht! Wozu wartest du? Wo ist da eine Flankenerkennung? Was 
schreibe ich denn eigentlich im 
Beitrag "Re: Binär Uhr Selbst Bauen", wenn du es nicht 
liest?

von Lars S. (pixelfreund)


Lesenswert?

Das ist mir bewusst, dass ich es noch in *.asm umbennen muss um es dann 
auf den µC zu schicken.


Ganz einfach: Weil ich die Flankenerkennung, so wie sie im Tutorial 
beschrieben ist, nicht verstehe. Deswegen hab ich es jetzt mit einer 
wartefunktion gemacht.

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


Lesenswert?

Lars S. schrieb:
> Das ist mir bewusst, dass ich es noch in *.asm umbennen muss um es dann
> auf den µC zu schicken.
Ähm nein, wenn du hier eine *.asm-Datei anhängst, dann wirst du mit 
Syntax-Highlighting belohnt.

> Ganz einfach: Weil ich die Flankenerkennung, so wie sie im Tutorial
> beschrieben ist, nicht verstehe.
Das war mein Verdacht. Dann frag doch...

> Deswegen hab ich es jetzt mit einer  wartefunktion gemacht.
"Ich weiß zwar, dass es Murks ist, habe aber einfach mal weitergemacht!"

Oder andersrum:
Malermeister zum Stift:
"Fenster streichen!"
Nach einer Stunde ruft der Stift:
"Fertig! Soll ich jetzt die Rahmen auch noch streichen?"

Als kleine Hilfe:
1
hauptschleife:
2
  mov  R26,R25       ; alten Eingangspegel merken  
3
  in   R25,PB        ; neuen Eingangspegel einlesen
4
  sbrs R25,0         ; Eingang abfragen, wenn high: überspringen
5
  rjmp hauptschleife ; Eingang ist low --> nix zu tun
6
  sbrc R26,0         ; Merker abfragen, wenn low: überspringen
7
  rjmp hauptschleife ; Merker ist high --> nix zu tun
8
        
9
steigende_flanke:    ; unsere steigende Flanke pro Sekundenimpuls
10
 
11
  inc r21            ; addieren +1
12
  cpi r3, 60         ; vergleichen
13
  brsh minuten       ; wenn 60, springe zu minuten
14
  rjmp hauptschleife ; zurück zur Hauptschleife


>  ldi r21, 0x01    ; +1 für addieren
Es gibt einen inc Befehl...

>   .equ r3=60
>  .equ r4=24
Sicher?

: Bearbeitet durch Moderator
von Lars S. (pixelfreund)


Angehängte Dateien:

Lesenswert?

Ich hab deine Hilfe jetzt mal verwendet und das draus gebaut. *Verweiß 
auf Anhang*


Lothar Miller schrieb:
> Ähm nein, wenn du hier eine *.asm-Datei anhängst, dann wirst du mit
> Syntax-Highlighting belohnt.
So wie jetzt im Anhang?


>>  ldi r21, 0x01    ; +1 für addieren
> Es gibt einen inc Befehl...
Danke, dachte mir schon, dass es sowas gibt.


>>   .equ r3=60
>>  .equ r4=24
> Sicher?
So hab ich das mal gefunden. Deswegen hab ich das verwendet.

von spess53 (Gast)


Lesenswert?

Hi

>So hab ich das mal gefunden. Deswegen hab ich das verwendet.

Glaube ich nicht.

MfG Spess

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


Lesenswert?

Lars S. schrieb:
> So wie jetzt im Anhang?
Probiers aus. Oder simuliere es einfach mal...

> So hab ich das mal gefunden.
Wofür war das dann?

Beim AVR könntest du es so machen:
1
 .EQU sec = R18
2
 .EQU min = R19
3
 .EQU hrs = R20
4
5
:
6
:
7
8
  clr sec            ; sekungen löschen
9
  inc min            ; addieren +1
10
  cpi min, 60        ; vergleichen

Die Kommentare, die nur das beschreiben, was der Befehl an sich schon 
beschreibt, kannst du dir sparen. Denn sonst änderst du mal den Befehl 
und schwuppdibohne steht da ein sinnloser Kommentar.

von spess53 (Gast)


Lesenswert?

Hi

>Beim AVR könntest du es so machen:

> .EQU sec = R18
> .EQU min = R19
> .EQU hrs = R20

Dann aber

 .def sek = R18  ( sec ist ein Befehl )
 .def min = R19
 .def hrs = R20

MfG Spess

von Lars S. (pixelfreund)


Lesenswert?

Müsste ich erstmal ein Programm dafür haben.
Noch schreibe ich alles mit dem Editor. (ich weiß, nicht die eleganteste 
Lösung.)

Wo ist der unterschied zwischen .equ und .def?

von spess53 (Gast)


Lesenswert?

Hi

>Müsste ich erstmal ein Programm dafür haben.
>Noch schreibe ich alles mit dem Editor. (ich weiß, nicht die eleganteste
>Lösung.)

Was, kein AVR-Studio?

Wenn nicht, hol dir das AVR Studio 4.19 (build 730) von

http://www.atmel.com/tools/studioarchive.aspx

Reicht für Assembler vollkommen.

>Wo ist der unterschied zwischen .equ und .def?

The EQU directive assigns a value to a label. This label can then be 
used in later expressions. A label assigned to a value by the EQU 
directive is a constant and can not be changed or redefined.

Syntax:
.EQU label = expression

The DEF directive allows the registers to be referred to through 
symbols. A defined symbol can be used in the rest of the program to 
refer to the register it is assigned to. A register can have several 
symbolic names attached to it. A symbol can be redefined later in the 
program.

Syntax:
.DEF Symbol=Register

MfG Spess

von Lars S. (pixelfreund)


Lesenswert?

Jetzt ja, hab aber von einem Kollegen die aktuelle Version bekommen, da 
wir die auf dem Firmennetz haben.
Versuche mich gerade damit einzuarbeiten.

Und danke für die Erklärung.

von Lars S. (pixelfreund)


Lesenswert?

Ich habe mal eine andere Frage:
Ich nutze PORTB,1 als Eingang, in der Simulation beim AVR-Studio 4 
funktioniert das auch. Aber in der Schaltung klappt es nicht. Ich habe 
auch schon nachgeschaut es liegt auch ein High-Signal an dem Port an 
(4,93V). Kann es sein, dass ich den irgendwie von T1 wechseln muss? (Er 
ist auch über "ldi r16 0x00 / out DDRB, r16" als Ausgang definiert.)

von Karl H. (kbuchegg)


Lesenswert?

Lars S. schrieb:
> Ich habe mal eine andere Frage:
> Ich nutze PORTB,1 als Eingang,


PORTx und Eingang passen nicht zusammen (mal vom Pullup abgesehen)

Wenn du von einem Pin lesen willst, dann ist das PINx Register dafür 
zuständig!

AVR-Tutorial: IO-Grundlagen

Wer etwas bauen will, muss auch die Grundlagen lernen.

: Bearbeitet durch User
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.