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.
Wie wäre es mit einem Schaltplan von dem was du aufgebaut hast. Parallelport, Hyperterminal klingt alles ein bisschen eigen.
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
das wäre schon eine Möglichkeit. das weiss ich schon aber der takt ist schon durch NE555 erzeugt.
Gast
#1286981
Schaltplan?
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...
zwischen µc und 555 sind die Teiler und zähler beschaltet.
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.
um ein heitzungssystem ein und auszuschalten. die digitaluhr ist ein bestandteil der heizunssteurung.
Gast
#1287315
Hi
>die digitaluhr ist ein bestandteil der heizunssteurung.
Mit einem 555????
MfG Spess
Gast
#1287317
spess53 schrieb: > Mit einem 555???? > > MfG Spess Ist bestimmt nur ein Spess ;)
@ 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
Gast
#1287328
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.??
Gast
#1287403
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
Gast
#1287410
Wir im Black Forest haben die genauere Uhr ;-)
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
Gast
#1287426
Peter Dannegger schrieb:
> Man baut einfach keine Uhren mit nem 555, das ist Unfug.
Na ja, für ne Eieruhr könnte er noch reichen ;)
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.
Gast
#1287477
Hi
>wäre es richtig wenn ich die Makros so definiere....
Nein. Deine Information ist jeweils in 7 Bit enthalten.
MfG Spess
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
Gast
#1288201
Bastian Koli schrieb:
> das ist nicht mein schaltplan , mein richtiger schaltplan beinhaltet 4
Was 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!
sorry ich hab gestern einen text drüber gepostet aber er ist nicht zum erscheinen gekommen.
ich hoffe ich hab euch nicht entäuscht.
Gast
#1288219
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
Gast
#1288226
@spess53: Meine Rede ;)
ich muss einen schaltplan posten
Gast
#1288233
Hi
>ich muss einen schaltplan posten
????????????????????????????????
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
Gast
#1288438
@ 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 :)
Gast
#1288441
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
@ Bastian Koli (koldat) >was muss ich als ertens tun damit der controller die werte abliest? Dich mal mit allergrundlegensten Grundlagen befassen. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports http://www.mikrocontroller.net/articles/AVR-Tutorial http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial MFG Falk
Gast
#1288485
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
hi; oder so: MIN_EINER PINA&0xF0 MIN_ZEHNER PINA&0x0E STD_EINER PINB&0x0F STD_ZEHNER PINB&0x30 mfg
Gast
#1288512
@Bastian Koli: Wie auch immer du willst...
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.
Gast
#1290099
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.
hi,
>Wenn du konkrete Fragen hast,kannst du sie ja hier wieder stellen.
ich hoffe ...
headers
#define MIN_EINER PINA&0xF0 //auslesen des aktuellen Zustands
#define MIN_ZEHNER PINA&0x0E
#define STD_EINER PINB&0x0F
#define STD_ZEHNER PINB&0x30
void main void
{
unsigned char zae1, zae2, zae3, zae4;
DDRA=0x00;
PORTA=0xFE;
DDRB=0xC0;
PORTB=0X3F;
init(); //Kommunikation über RS232
while(1)
{
if(MIN_EINER==zae1) zae1++; ???
.
//hier muss ich die Zahlen in Ascii zeichen umwandeln wie??
printf("\n\r%2d:%2d");
}
}
}
mfg
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 | |
... und laut C-Regeln wird das so geparst
1 | |
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 | |
oder aber man macht kein derartiges Rundumschlagmakro, sondern dröselt sich das ein wenig auf
1 | |
2 | |
3 | |
und schreibt dann
1 | |
2 | |
3 | |
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
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Für den Schritt "Umwandeln nach ASCII" schaust du dir das hier an http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
hi;
>>>Minuten = (10 * MinZehner + MinEiner)|0x30;
danke schön, diese Zeile hat mir viel geholfen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

