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 =)
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 ■
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
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
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
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...
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.
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 |
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++; |
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
Harald Wilhelms schrieb: > Und wo findet man die? :-) Bei so gut wie jedem Elektronikhändler, z.B.: TME, Reichelt, Farnell, Conrad, Mouser, RS Components,...
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.
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
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.
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.
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. :-)
Harald Wilhelms schrieb: > D e i n e Wenn wir auf diesem Niveau sind, wofür stehen diese 5 einzelnen Buchstaben?
:
Bearbeitet durch User
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?
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....
npn schrieb: > Ooooch, jetze isser beleidigt. Smilies von Harald nicht gesehen? Verdammt, meine Smilies vergessen :-(
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?
Kleiner Zahlendreher, na und? Bis jetzt hat aber anscheinen noch jeder, außer dir, verstanden was ich sagen wollte.
:
Bearbeitet durch User
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.
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.
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?
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.
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
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.
Hi
>So hab ich das mal gefunden. Deswegen hab ich das verwendet.
Glaube ich nicht.
MfG Spess
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.
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
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?
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
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.
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.)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.