Hallo erstmal, bin neu auf dem Gebiet. Ich habe dieses Topic ins Leben gerufen damit, wenn man eine Frage hat nich umbedingt ein neues Topic offnen muss.
Ich begnin mal mit einer Frage.
Kann ich euf meinem Duemilanove die analogen 0-5 und die digitalen 0-13 pin auf einmal benutzen? Wenn ja wie mache ich den untershied zwischen ihnen.
z.B. int ledpin = 1 //digitaler pin fur's led ein/aus schalten
int potpin = 1 //analoger pin fur den poti lesen
In deinem genannten Beispiel weiß der Mikrocontrollernoch gar nichts, hier machst du nur eine Variablenzuweisung. Ebensogut könntest du die Variablen "Apfel" und "Birne" nennen.
Erst bei der Abfrage mit analogRead() bzw. bei den digitalen Pins mittels pinMode () erfolgt die Unterscheidung.
Naechste frage, wie kann ich mehrere pins auf eimal den selben wert geben?(High oder LOW) Muste 4 pins auf low setzen. Muss ich fur jeden separat alles schreiben?
Naechste frage, wie kann ich mehrere pins auf eimal den selben wert geben?(High oder LOW) Muste 4 pins auf low setzen. Muss ich fur jeden separat alles schreiben?
Nein, du mußt nicht alle einzeln ansteuern, aber dazu müßtest du mehr über I/O-Ports und Kontrollregister wissen, als du als Anfänger wissen willst. Also bleibe besser für den Anfang dabei, die Ports einzeln zu setzen.
Ja alle einzeln; kannst Du aber in einer Schleife machen.
Es geht aber auch direkt über die direkte Programmierung eines Ports mit einem BYTe-Wert; dann greifst Du direkt auf die Register des controller zu und alles ist weniger verständlicher und Du mußt mehr aufpassen was Du machst, bzw zuerst den wert einlesen , die bits ändern die Du verädern willst und den Wert zurückschreiben.
Grüße Uwe
Soweit ich weiß, ist die Auswahl an Mikrocontroller als Arduino recht beschränkt, letztlich gibt es aber Lösungen für zusätzliche Ausgänge, sei es durch Multiplexing oder durch Prtexpander, die über I2C angeschlossen werden.
Es kommt auf den genauen Anwendungszweck an, wenn du den näher beschreibst, kann dir sicher geholfen werden.
Ich will eine Uhr machen. Dazu verwende ich display-s mit 7 segmenten, einem driver(4511B) fur die display-s und brauche einen IC mit mindestens 18 ein/aus gangen.
Der Arduino 2009 / UNO hat 20 digitale Ausgänge; Die analogen Eingänge können als Digitale Ausgänge verwendet werden, Ausgänge 14 bis 19, Eingach als Ausgänge deklarieren. Das glaube ich löst Dein Problem.
Ansonsten einen Arduino Mega (54 Ausgänge) oder Seeduino Mega (70 Ausgänge).
Außer den ATmega die bei den Arduino's verwendet werden, können meines Wissens keine anderen Modelle der Atmel-Controller mit einem Arduino-Bootloader versehen werden, weil Die Bootloader für diese Modenlle nicht geschrieben wurden und darum nicht funktionieren würden. Des weiteren generiert der C-Compiler nur Code für die ATmega Serie da dies im IDE so eingestellt ist. Die Notwendigkeit daß Code für andere Controllermodelle generiert wird, besteht nicht, da Ardunino keine anderen Controller verwendet (der Compiler könnte das).
(Wenn ich etwas falsches geschrieben habe, korrigiert mich bitte jemand)
Für wenigen Stellen halte ich das CMOS-IC 4511 für geeignet, die Anzeige einer Digitaluhr mit 6 Stellen (jeweils 2 für Stunde, Minute und Sekunde) würde ich persönlich jedoch immer im Multiplex-Verfahren ansteuern.
Dazu definierst du Spalten und Zeilen, brauchst also für jede Ziffer eine Spaltenleitung und 7 Zeilenleitungen. somit kommst du bei 4stelligen Anzeigen auf 11 IO-Pins, bei 6 Stellen auf nur 13 Pins.
Der große Trick besteht eben darin, zu einem bestimmten Zeitpunkt nur einzelne Segmente der Anzeige aufleuchten zu lassen, da das menschliche Auge jedoch träge ist, wirkt das nach wie vor als stehendes Bild.
Hallo uwefed, danke fur die Antwort. Mit dem max ist es mir doch etwas zu compliziert und teuer, bleibe bei dem 4511.
sth77: Das clingt sehr gut. Muss mich mehr daruber erkundigne. Also kann ich mit dem 4511 mehrere segmente gleichzeitig steuern. Sehr gut. Ich will blos minuten und stunden.
Eine Kombination CD4511 mit 4 Transistoren (5 wenn Du einen Doppelpunkt im Sekundenrythmus blinken lassen willst) ist zwar biliger ( 0.34? + 4x BC237 ( der BC109 wird nicht mehr produziert) 0.204?) damit sind wir unter 1?. Ok ist billiger.
Die Ersparnis erkaufst Du Dir aber mit mehr verwendeter Rechenleistung. Du mußt regelmäßig die einzelnen Zahlen ausgeben und zwischen den 4 Anzeigen herumschalten und das in mit einer Umschaltfrequenz von mindestens 30Hz besser 50Hz.
Mit50 Hz und 4 Stellen sind das Umschalten mit 200Hz. Ich glaube das bringt den Arduino an die Grenze des machbaren. Zwischendurch mußt Du auch noch die Uhr auslesen und die Zahl in 2 BCD umwandeln. Außerdem mußt Du auch eine Tastaturabfrage programieren um die Zeit einstellen zu können. Aber versuch's.
Außerdem: der DC4511 kann max 25mA liefern. Das könnte zuwenig sein damit die Anzeige hell genug ist; ist auszuprobieren.
Ich vergass zu erwahnen dass ich aus Rumanien bin. Mir ist es leichter in deutsch als in englisch zu sprechen.
Bei unz sind die Max7129 atwas teurer. Ich habe aber trotzdehm gesehen dass man mit einem 4511 auch 4 anzeigen bedienen kann.(link in meinem anderen replay) Fals ich aber 4x4511 brauche muss ich auch den atmega wechseln. Brauche einen mit 16 I/O ports.
Wenn der Max7129 zu teuer ist, besorge dir für jede Stelle eine 74HC595. Die sind leicht erhältlich und kosten ?0.70 das Stück und verbrauchen alle zusammen nur 3 Ports.
Für Detail suche nach Arduino und 74HC595. Es gibt dazu ein Beispiel mit genau deinen Anforderungen. Zum Beispiel dieses hier: http://www.arduino.cc/en/Tutorial/ShiftOut
Habe das Problem gelost. Fur ne 24h Anzeige braucht man 3 ein halb 4511-er. Ich meine dass der 4-te 4511-er nur 0,1,2 anzeigen muss. Dafur reuchen mir 2 Pins. D und C vom 4511 werden an 0V angeschlossen un blos A und B werden verwendet. So breuche ich 3x 4Pins + 2 Pins = 14Pins, also von 0 bis 13. ;D
Hallo Shebu
Wie ich schon sagte Du kannst die Analogen Eingänge auch als Ausgänge verwenden und hast so 20 Ausgänge.
Wo bekommst du die Zeit her? aus einer RTC?
Grüße Uwe
Eine Delay-Anweisung ist definitiv nicht geeignet, um eine Uhr zu bauen. Zum einen Blockierst du den gesamten Mikrocontroller für diese Zeit, was ein äußerst schlechter Programmierstil ist. Noch dazu braucht die Abarbeitung der Befehle, sprich die Umwandlung in BCD eben auch etwas Zeit, die sich zu deinem Delay-Sekundentakt hinzuaddieren würde und die Uhr damit hochgradig ungenau macht.
Der Ausweg wurde hier schon angesprochen: RTC. Die Echtzeituhr (Real Time Clock) hat einen ganz guten Wikipediaeintrag: Echtzeituhr – Wikipedia.
Sehr viel besser finde ich die die Lösung, das DCF77-Signal zu verwenden. Somit entfällt auch das nervige Stellen der Uhr. Empfangsmodule gibt es für kleines Geld bei Pollin und Conrad.
Die Zeit wird weitergezählt auch wenn die Versorgungsspannung fehlt (hat eine Baterie die ca 10 Jahre hält).
Eine weitere Taktquelle sind die 50 Hz der Wechselspannung die im Mittel in Europa sehr genau sind ( ich kann nichts über Rumänien sagen). Vor 25 Jahren war die Netzfrequenz im Ostblock ungenauer, für heute weiß ich es nicht.
Du mußt eine Möglichkeit vorsehen die Uhr zu stellen.
@sth77
bist Du sicher daß das DCF77-Signal bis nach Rumänien reicht? Shebu schrieb er sei aus Rumänien.