hallo;
Ich hab eine digitale uhr aufgebaut . sie verfügt über 13 ausgäne. diese
sollen als eingänge mit einem µc_system (mega32) ausgelen und als
Textmeldung in einem Bildschirm (hyperterminal) im format HH:MM
erscheinen.
was muss ich als ertens tun damit ich die aktuelle uhrzeit auslesen
lass, da der PINB5 wird gemeinsam vom prallelen Port und von den
10er-stunden benutzt?
ich freu mich auf jeden hinweis der mich einen schritt weiter nach vorn
bringt.
Bastian Alam schrieb:
> Ich hab eine digitale uhr aufgebaut . sie verfügt über 13 ausgäne. diese> sollen als eingänge mit einem µc_system (mega32) ausgelen und als> Textmeldung in einem Bildschirm (hyperterminal) im format HH:MM> erscheinen.
Du weißt aber schon, daß der ATmega32 interne Timer hat, mit denen man
Zeit, Tag, Jahr, Schaltjahr, Sommerzeit selber zählen kann.
Man muß da nix extra ranpappen außer nen Quarz.
Noch einfacher wäre natürlich, statt auf Hyperterminal, unten rechts auf
die Taskleiste zu klicken.
Peter
Bastian Alam schrieb:
> das wäre schon eine Möglichkeit. das weiss ich schon aber der takt ist> schon durch NE555 erzeugt.
Du kannst auch den NE555 an deinen Mega32 pappen und dessen Schwingungen
mitzählen.
Allerdings hast du mich jetzt neugierig gemacht. Wie erzeugst du mit
einem 555 eine Schwingung, die in der Frequenz genau genug ist, dass
deine Uhr nicht schon nach 5 Minuten horrend falsch geht?
so kann man die minuten betrachten . der erste zähler würde nur bis 5
und 2 te bis 9 zählen. die anschlüsse müssen vom mega32 ausgelesen. mehr
ist nicht. der takt mit 555 läuft super...
Und für was brauchst du da noch den Mega32, oder umgekehrt, für was das
ganze 555 und Teiler wenn du einen Mega32 hast. Ist irgenwie nicht ganz
schlüssig.
@ spess53 (Gast)
>>die digitaluhr ist ein bestandteil der heizunssteurung.>Mit einem 555????
Ist ne jamaikanische Uhr, dort sieht man das mit der Zeit viiiiiel
relaxter ;-)
http://www.arte-di-bianca.de/image/pause_auf_jamaika.gif
MfG
Falk
Hi
>Ist ne jamaikanische Uhr, dort sieht man das mit der Zeit viiiiiel>relaxter ;-)
Und die Funktion einer Heizung dürfte man noch wesentlich relaxter
sehen.
MfG Spess
ich kann schon die uhr ohne das "spess" programmieren, aber es wurde im
projekt verlangt dass der µc die PINs von der uhr lesen soll. nachdem
ich diese aufgabe erledigt habe muss ich die nächste tun dh ohne spess.
einverstanden.
könnt ihr mir bitte zeigen wie ich das tun soll.??
Hi
Dann hänge einfach an die Ausgänge der 4026 an jeweils einen Port vom
ATMega32. Noch eine Umrechnung von 7-Segment nach Dezimal (z.B. case)
und fertig.
Was ist da so schwer dran?
MfG Spess
Bastian Koli schrieb:
> ich kann schon die uhr ohne das "spess" programmieren, aber es wurde im> projekt verlangt dass der µc die PINs von der uhr lesen soll. nachdem> ich diese aufgabe erledigt habe muss ich die nächste tun dh ohne spess.> einverstanden.> könnt ihr mir bitte zeigen wie ich das tun soll.??
Du mußt Dir einen inversen 7-Segment Dekoder programmieren
(Lookup-Table).
Mit dem 555 wirst Du vielleicht die Genauigkeit einer Kerzenuhr (900 n.
Chr.) erreichen.
Der Mega32 ist mit Quarz mindestens 10000-mal besser.
Man baut einfach keine Uhren mit nem 555, das ist grober Unfug.
Peter
ich bin damit einverstanden ihr habt alle recht. ich MUSS das tun. also
muss ich irgendwie ein schritt weiter komm. wäre es richtig wenn ich die
Makros so definiere.
#define MIN_EINER PINA&0xF0
#define MIN_ZEHNER PINA&0x0E
#define STD_EINER PINB&0x0F
#define STD_ZEHNER PINB&0x30
Bastian Koli schrieb:
> zwischen µc und 555 sind die Teiler und zähler beschaltet.
Nicht böse sein.
Aber was du da hast, ist einfach nur grober Unfug.
Du brauchst keinen 555, du brauchst keine BCD Dekoder.
Du brauchst einfach nur den Mega32 (der für diesen Zweck hoffnungslos
überdimensioniert ist, aber was solls), die 7-Segment Anzeigen und ein
bischen Hühnerfutter rundherum.
Und natürlich ein Programm.
deutlich weniger Bauteile
deutlich bessere Genauigkeit
deutlich einfacheres Programm
Und zu guter letzt:
Du bist schneller fertig, wenn du das bisherige, völlig verkorkste
Konzept über Bord wirfst und das ganze richtig machst.
Manchmal muss man auch akzeptieren, dass man sich verrant hat. Oder das
das bisherige Konzept einfach nicht mehr tragfähig genug ist und
geändert werden sollte.
Das Design (wenn wir mal den 555 aussen vor lassen) mag ja irgendwann
einmal vernünftig gewesen sein, aber jetzt ist es am Ende angelangt. Da
hilft dann auch das Drankleben von Erweiterungen mit Klebeband nichts
mehr.
hi
>Nein. Deine Information ist jeweils in 7 Bit enthalten.
7 bits nur für die minuten 6 für die stunden.
vom obigen spess abgesehen nehmen wir an die 13 bits sind alle eingänge,
muss ich jetzt den µc konfigurieren oder es reicht wenn ich die Funktion
init(); einbinde???
zum beispiel:
DDRA=0x01; // PINA1 als ausgang alle anderen als eingänge.
DDRB=0xC0; // ...
mfg speeeeeeeeess
Bastian Koli schrieb:
> hi>>>Nein. Deine Information ist jeweils in 7 Bit enthalten.>>> 7 bits nur für die minuten 6 für die stunden.
Wie kommst da drauf?
Ich denke du willst dich doch vor die 7-Segment Anzeigen klemmen, oder
etwa nicht (zumindest ist aus deinem obigen Schaltbild nicht erkennbar,
wie du es sonst lösen könntest)
Das bedeutet aber auch, dass du pro Stelle 7 Leitungen überwachen
musst.
Du brauchst also
Stunden Einer 7 Leitungen
Zehner 7 Leitungen
Minuten Einer 7 Leitungen
Minuten 7 Leitungen
Macht in Summe 28 Leitungen, die du überwachen musst und deren Zustand
du auswerten musst, um zu wissen, was da gerade an der Anzeige angezeigt
wird.
Was denkst du eigentlich, warum hier alle sagen, dass das Konzept eine
ausgemachte Schnapsidee ist? Sowas macht man nur, wenn es gar nicht
anders geht, wenn man zb einem teuren Messgerät auf die Finger schauen
muss. Aber doch nicht bei einer Uhr, die für für einen angehenden
Programmierer eine Übungsaufgabe darstellt und schneller programmiert
ist, als du die 28 Leitungen anschliessen kannst.
Ich hab mir den Thread jetzt nochmal durchgelesen.
Deine Angaben im Eröffnungsposting und dein 'Schaltplan' passen hinten
und vorne nicht zusammen.
Ich hab schon Verständnis, dass du das aus irgendeinem Grund so machen
MUSST. Ob das nun sinnvoll ist oder nicht.
Aber ehe das fröhliche Spekulieren, wie man das ganze in Code umsetzen
kann, weitergeht, wäre es vernünftig, wenn du erst mal tatsächlich einen
aktuellen Schaltplan postest. Und zwar von der Schaltung die da
aufgebaut ist und nicht von einer die so ähnlich aussieht!
Vielleicht gibt es ja eine Möglichkeit sich an die Zähler zu klemmen und
die Zeit von dort abzunehmen.
(Obwohl mein persönlicher Favorit immer noch ist: Die Leitungen zu den
7-Segmenten direkt ziehen und dann klammheimlich die Zuleitungen von der
vorhandenen Schaltung mit einem kleinen Messerchen ....)
HI;
das ist nicht mein schaltplan er ist nur zum veranschaulichen, mein
richtiger schaltplan beinhaltet 4 teiler sie teilen 500hz (555) bis auf
eine sekunde. 4 zähler, sie haben jeweils 4, 3, 4,2 ausgänge 4 für
minuten_einer 3 für minuten_10ner 4 std_1er 2 sdt10er. ja stimmt die
zeit wird von den zählern abgenommen. Diese ausgänge müssen von Mg32
ausgelesen und als ausgabe auf einen monitor (Hyperterminal) so
wiedergegeben:
Bitte geben sie die uhrzeit im format HH:MM
Es ist jetzt 16:04
mfg
Bastian Koli schrieb:
> das ist nicht mein schaltplan , mein richtiger schaltplan beinhaltet 4Was bist denn DU für ein HELD ?
Und warum postest du dann zuerst einen völlig anderen Schaltplan und
lässt uns hier die Köpfe rauchen?!?
Leute gibts... also wirklich!
Hi
>sie haben jeweils 4, 3, 4,2 ausgänge 4 für minuten_einer 3 für >minuten_10ner 4
std_1er 2 sdt10er.
Willst du uns veralbern? Deine Leitungszuordnung ist nicht 7-Segm.
sondern BCD. Also sind zwischen Zähler und Anzeige noch Decoder. Weshalb
postest du ein total irreführendes Schaltbild.
MfG Spess
hi
>Deine Leitungszuordnung ist nicht 7-Segm.
sondern BCD
aber das spielet überhaupt keine rolle. ich hab die ganze zeit gefragt,
was muss ich dem µc in einem C-compiler mitteilen das er mir den
zählerstand abliest?
bauteile: dezimalzähler 0bis9, µcsystem mega32.
wenn man Q1-4 an einen Port schließt, sollte der zählerstand abgelesen
werden, und als textmeldung in einem bildschirmmenü erscheinen.
ich veralban hier niemand ... ich möchte einfach dies hinkriegen und
vielen dank noch ma.
mfg basti
@ Falk Brunner (falk)
>>>die digitaluhr ist ein bestandteil der heizunssteurung.>>Mit einem 555????>Ist ne jamaikanische Uhr, dort ..
hab schon Quarz-Oszillatorn mit einem 555 gesehen!
Man braucht eigendlich nur einen Negator (Phasenschieber) und
einen Verstärker und schon schwingts. Beides hat ein 555
"on Chip".
mfg Z8 :)
Hi
>aber das spielet überhaupt keine rolle.
Das spielt eine grosse Rolle. 7-Seg-Code ist eine willkürliche Zuordnung
der Zahl auf die Segmentdarstellung. Ohne die Kenntnis dieser Zuordnung
ist eine Decodierung unmöglich. BCD ist die Zahl.
>ich veralban hier niemand
Aber gewaltig!
>ich möchte einfach dies hinkriegen und
Dann papp die Leitungen an den Controller, Lies die Werte ein. Dann
ASCII-Zeichen draus machen. Einen String basteln und an den PC senden.
MfG Spess
hi,
genau, das ist die grosse frage !!!! >lies die werte ein.
wenn ich wüsste wie das funktionieren sollte hätte ich wirklich
niemand veralbant.
was muss ich als ertens tun damit der controller die werte abliest?
danke
spess53 schrieb:
>>ich veralban hier niemand>> Aber gewaltig!
Ich würde es mal so ausdrücken: Er veralbert uns aufgrund seiner
Unwissenheit. Und das gewaltig ;) ...aber immerhin unbeabsichtigt.
Bastian Koli schrieb:
> hi,> genau, das ist die grosse frage !!!! >lies die werte ein.>> wenn ich wüsste wie das funktionieren sollte hätte ich wirklich> niemand veralbant.> was muss ich als ertens tun damit der controller die werte abliest?> danke
Zuerst einmal wäre es von Vorteil die Ausgänge der Zähler mit den
Eingängen des µCs zu verbinden.
Mein Vorschlag:
Minuten Einer Q0 --> PA0
Minuten Einer Q1 --> PA1
Minuten Einer Q2 --> PA2
Minuten Einer Q3 --> PA3
Minuten Zehner Q0 --> PA4
Minuten Zehner Q1 --> PA5
Minuten Zehner Q2 --> PA6
Stunden Einer Q0 --> PC0
Stunden Einer Q1 --> PC1
Stunden Einer Q2 --> PC2
Stunden Einer Q3 --> PC3
Stunden Zehner Q0 --> PC4
Stunden Zehner Q1 --> PC5
Als nächstes schreibst du dir ein Programm, welches die Ports abfrägt,
auswertet und über den USART an den PC schickt.
Gruß,
Magnetus
Bastian Koli schrieb:
> hi;> oder so:>> MIN_EINER PINA&0xF0> MIN_ZEHNER PINA&0x0E> STD_EINER PINB&0x0F> STD_ZEHNER PINB&0x30> mfg
Du musst dich erst mal mit den Grundlagen der Programmierung
beschäftigen. Einen µC programmieren ist ein klein wenig anders, als
einen Kondensator an einen 555 anzuschliessen.
Du musst da durch. Es hat keinen Sinn weiterzumachen, solange du bei den
Grundlagen scheiterst. Und einen Port einzulesen sind Grundlagen. Erste
Stunde, gleich nach der Einführung kommt alles Wissenswerte um mit einem
Port umzugehen.
Schau endlich ins Tutorial! Besser wäre es allerdings, wenn du auf einem
PC mal deine ersten paar Programme schreibst.
> Bitte geben sie die uhrzeit im format HH:MM> Es ist jetzt 16:04
Auf das Drama, die Zähler mit der aktuellen Uhrzeit hochzutakten freu
ich mich jetzt schon.
hi,
>Einen µC programmieren ist ein klein wenig anders, als>einen Kondensator an einen 555 anzuschliessen.
das weiss ma schon.aber wenn man nicht weiterkommt, ein kleiner hinweis
schadet niemand.
Bastian Koli schrieb:
> das weiss ma schon.aber wenn man nicht weiterkommt, ein kleiner hinweis> schadet niemand.
Hinweise hast du ja jetzt schon bekommen. Wenn du konkrete Fragen hast,
kannst du sie ja hier wieder stellen.
Bastian Koli schrieb:
> #define MIN_EINER PINA&0xF0 //auslesen des aktuellen Zustands
Solche #define sind keine gute Idee
Da versteckt sich nämlich nur allzuleicht ein Fehler ...
> if(MIN_EINER==zae1) zae1++; ???
der sich hier bemerkbar macht.
Wenn der Präprozessor seine Arbeit gemacht hat und die Textersetzungen
vorgenommen hat, dann steht da ...
1
if(PINA&0xF0==zae1)
... und laut C-Regeln wird das so geparst
1
if(PINA&(0xF0==zae1))
nicht ganz das was du willst.
Entweder man macht daher beim #define ein paar Klammern mehr (PS:
Leerzeichen kosten nichts, können aber ungemein beim Verständnis eines
Codes helfen)
1
#define MIN_EINER ( PINA & 0x0F )
oder aber man macht kein derartiges Rundumschlagmakro, sondern dröselt
sich das ein wenig auf
1
#define MINUTE_PORT PINA
2
#define MINUTE_EINER 0xF0
3
#define MINUTE_ZEHNER 0x0E
und schreibt dann
1
....
2
3
if((MINUTE_PORT&MINUTE_EINER)==zae1)
Was willst du eigentlich mit zae1. Wenn du vom Minuten Port die
entsprechenden Pins holst, dann hast du bereits im Prinzip deine Zahl.
Sie ist nur um 4 Bits vershoben, im High Byte. Es reicht also völlig,
wenn du sie um 4 Bits nach rechts verschiebst um eine Zahl zwischen 0
und 16 zu bekommen. Damit hast du dann die Einerstellen deiner Zahl
Dasselbe nochmal für die Zehnerstelle (diesmal ohne Schieben), und schon
bist du soweit fertig, dass du die Zehner und die Einer als einzelne
Ziffern aber bereits in Zahlenform hast. Daraus muss man jetzt nur noch
die tatsächlichen Minuten zusammensetzen. Das ist aber einfach. Wenn du
als Zehner 2 und als Einer 5 hast, dann lautet die Zahl 10 * 2 + 5 = 25
In Code