Binär Uhr Selbst Bauen

Gast #3639644
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
#3735681
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
Moderator (Firma: Titel) Persönliche Seite #3735688
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...
#3735694
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.
Moderator (Firma: Titel) Persönliche Seite #3735747
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
#3735779
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++;
#3736381
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
#3736406
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.
#3736414
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
#3736466
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.
#3736498
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.
Moderator (Firma: Titel) Persönliche Seite #3736546
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....
Moderator (Firma: Titel) Persönliche Seite #3738025
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?
Moderator (Firma: Titel) Persönliche Seite #3738091
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?
#3738871
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.
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #3739087
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.
Gast #3739139
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
#3756585
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.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren