Hallo Forum, ich möchte in einer Schaltung einen Arduino Nano einsetzen der dort eine einfache Steuerungsaufgabe übernimmt. Seit vielen Jahren nicht mit µCs beschäftigt, bin daher momentan in der Einlernphase, seit bitte nachsichtig ;-) Meine Schaltung hat 6 Eingänge (Schalter mit Pulldown an A2-A7) und mehrere Ausgänge an den Digitalpins. Damit mir die Zuordnung im Sketch leichter fällt habe ich den Pins Namen zugeordnet, die Analogpins werden als Digitale Eingänge verwendet. Das sieht dann so aus: >#define REL_ENABLE 2 >#define 0R_REL 3 >#define +6DB_REL 4 >#define +12dB_REL 5 ..... Später im loop aufgerufen z.B. so: >// 0R Schalter gedrückt > >if(0R==HIGH){ > if(100R==LOW){ > digitalWrite(0R_SW, HIGH); > digitalWrite(100R_SW, LOW); > if(MUTE==LOW){ > digitalWrite(0R_REL, HIGH); > digitalWrite(100R_REL, HIGH); > } > } >} Ich habe mich ans Nano Pinout gehalten: http://www.pighixxx.com/test/wp-content/uploads/2014/11/nano.png A6 & A7 kann ich auf die weiße aber nicht als Digitale Eingänge definieren, die haben im oberen Dokument auch keine passende Bezeichnung. Wie kann ich der SW möglichst einfach sagen das diese Pins als reguläre Digitale Eingänge zu verwenden sind und ihnen einen Namen zuordnen? Gibt es da eine einfache Lösung? Danke! Gruß, Jan
Jan schrieb: > Wie kann ich der SW möglichst einfach sagen das diese Pins als reguläre > Digitale Eingänge zu verwenden sind und ihnen einen Namen zuordnen? Gibt > es da eine einfache Lösung? Das sind reine analog Input. Nichts sonst. PS: Warum glaubst du dem Datenblatt nicht?
Jan schrieb: > Gibt es da eine einfache Lösung? Nein, einfach nicht, aber es gibt eine Lösung als AD-Wandler betreiben. http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-9223-Automotive-Microcontrollers-ATmega48PA-ATmega88PA-ATmega168PA_Datasheet.pdf
Danke für Eure Antworten! Sehr schade, dann muss ich mich gleich mit dem ADC auseinander setzen. Hatte gehofft das beim ersten µC Projekt vermeiden zu können. Dem Datenblatt glaube ich natürlich, auch wenn ich das vom Mega32 nicht ganz gelesen habe.
Jan schrieb: > Dem Datenblatt glaube ich natürlich, auch wenn ich das vom Mega32 nicht > ganz gelesen habe. Solltest du aber mal tun, dann wirst du feststellen, dass ADC6 und ADC7 des Mega32 sowohl analog können, als auch vollwertige digital Pins (PA6 und PA7) sind.
Jan schrieb: > auch wenn ich das vom Mega32 nicht > ganz gelesen habe. Aber du hast keinen Mega32, sondern einen Mega328P... Jan schrieb: > in einer Schaltung einen Arduino Nano einsetzen
sumo schrieb: > Jan schrieb: >> auch wenn ich das vom Mega32 nicht >> ganz gelesen habe. > > Aber du hast keinen Mega32, sondern einen Mega328P... > > Jan schrieb: >> in einer Schaltung einen Arduino Nano einsetzen Auf dem Schema V2.3 zum Arduino Nano habe ich den Atmega168-20au gefunden. Gibt es noch andere Versionen?
Harlekin schrieb: > Gibt es noch andere Versionen? Üblich ist der ATMega328P Der Nano mit ATMega168, ist meines Wissens nach, ausgestorben. Schon lange keinen mehr im Handel gesehen(aber das heißt nix)
>Solltest du aber mal tun, dann wirst du feststellen, dass ADC6 und ADC7 >des Mega32 sowohl analog können, als auch vollwertige digital Pins (PA6 >und PA7) sind. Dann verstehe ich nicht wie du das vorher meintest? "Das sind reine analog Input. Nichts sonst." http://www.pighixxx.com/test/pinouts/boards/nano.pdf Ich habe jetzt weit genug ins Datenblatt geschaut und gesehen das dort alle Analogpins auch als Digitale I/Os verwendet werden können. Laut der verlinkten Grafik vom Nano Pinout (rotes Ausrufezeichen) ist das aber wohl nicht so. Könnt ihr mir verraten warum? Scheine da einen Denkfehler zu haben? Danke nochmal!
Auf meinem Board ist der Mega328P in irgend einem vermutlich QFN Package.
Jan schrieb: > Dann verstehe ich nicht wie du das vorher meintest? > > "Das sind reine analog Input. > Nichts sonst." Vorher sprachest du von einem Arduino Nano!?!? Und dazu ist meine Aussage korrekt. Und danach sprachst du vom Mega32. Und dazu ist meine zweite Aussage korrekt. Tipp: Drücke dich klar aus, dann bekommst du auch eindeutige Antworten. Eierst du rum, dann ....
Jan schrieb: > Ich habe jetzt weit genug ins Datenblatt geschaut und gesehen das dort > alle Analogpins auch als Digitale I/Os verwendet werden können. Das weiße Ausrufezeichen im roten Dreieck sagt dir nichts?
Jan schrieb: > Auf meinem Board ist der Mega328P in irgend einem vermutlich QFN > Package. Dann dürfte folgendes Schema passen. https://www.arduino.cc/en/uploads/Main/Arduino_Nano-Rev3.2-SCH.pdf Wahrscheinlich wurden die Anschlüsse A6/A7 nicht angepasst. Folgendes Datenblatt hat die Beschreibung "ATmega328/P AVR MCU with picoPower Technology" und ist auffällig neu: http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega328_P%20AVR%20MCU%20with%20picoPower%20Technology%20Data%20Sheet%2040001984A.pdf Gemäss dem Pinout müssten die Anschlüsse A6 und A7 auch digital konfigurierbar sein.
Harlekin schrieb: > Gemäss dem Pinout müssten die Anschlüsse A6 und A7 auch digital > konfigurierbar sein. Sind sie nicht. No! Kannste knicken. Ein Irrtum. Wird nix. Nada.
>Drücke dich klar aus, dann bekommst du auch eindeutige Antworten. >Eierst du rum, dann .... Sorry, die rede ist weiterhin vom Nano. >Das weiße Ausrufezeichen im roten Dreieck sagt dir nichts? Wenn ich ins Zusammengefasste Datenblatt (Seite 11) vom 328P schaue sehe ich dort Pin 19 und 22 die beim Arduino A6 und A7 entsprechen. http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Summary.pdf Im Datenblatt sind diese als ADC bezeichnet, mich hat verwirrt das sie dort auch (durch die Zuordnung mit den Farben) Als Digital Pin verwendet werden können. Vermutlich ist gemeint das diese auch mit entsprechender Auswertung im Sketch einen Digitalen Eingang abgeben können, anders kann es ja nicht sein. Von meiner Seite aus ist es jetzt klar, ich lese mich in die Auswertung der ADC Pins ein und versuche es. Danke nochmal für die Hilfe!
Das hatten wir schonmal vor ein paar Wochen durchgekaut. Dieses Bild im DB ist fehlerhaft. Die Pins sind nur über den ADC abzufragen.
Jan schrieb: > anders kann es ja nicht sein. Die Farbgebung ist ein Irrtum. Mehr nicht.... Irgendein Grafiker/Bildchenmaler hat seinen Auftrag ausgeführt. Dank mangelnder Sachkenntnis, oder Sorgfalt, eben nicht 100% richtig. Ich vermute: Das wird innerhalb der nächsten 2 Jahre korrigiert werden. Im Moment haben sie noch wichtigeres zu tun...
Stefan U. schrieb: > Das hatten wir schonmal vor ein paar Wochen durchgekaut. Dieses Bild im > DB ist fehlerhaft. Die Pins sind nur über den ADC abzufragen. Das sehe ich jetzt auch so. Es gibt keine Register, wo man den Zustand abfragen könnte.
Gemeine Falle für einen Anfänger, da denkt man eher an ein Problem mit dem "User" vor dem Schirm.
Jan schrieb: > A6 & A7 kann ich auf die weiße aber nicht Ich auch nicht, meine sind schwarz. Jan schrieb: > Sehr schade, dann muss ich mich gleich mit dem ADC auseinander setzen. Es ist in der Tat extrem schwierig, nach Stunden im Internet: int Messwert = analogRead(7); if (Messwert > 800) { mache irgendwas } Harlekin schrieb: > Auf dem Schema V2.3 zum Arduino Nano habe ich den Atmega168-20au > gefunden. > Gibt es noch andere Versionen? Kann man immer noch in China kaufen. Tue ich aber nicht, schon seit Jahren ist der 328 verbreitet. Jan schrieb: > Ich habe jetzt weit genug ins Datenblatt geschaut und gesehen das dort > alle Analogpins auch als Digitale I/Os verwendet werden können. Alle außer 6 und 7. Jan schrieb: > Gemeine Falle für einen Anfänger, da denkt man eher an ein Problem mit > dem "User" vor dem Schirm. Genau das ist es letztendlich auch: Wenn man Arduino einsetzt, hält man sich an deren Beschreibungen - da sind A7 und A7 als nicht-digital benannt. Dank der Hochsprache ist man von dem eigentlichen Controller entfernt und muß sich um dessen Interna nur rudimentär kümmern. Selbst wenn der µC das könnte, wer sagt uns, dass die A*-IDE das unterstützen würde?
Manfred schrieb: > Selbst wenn der µC das könnte, wer sagt uns, dass die A*-IDE das > unterstützen würde? Die Arduino IDE unterstützt in Sachen µC offensichtlich nahezu alle Varianten, denen man C++ aufdrücken kann. Auf irgendwelche Pins kommts da nicht so an. Denn da gibts zu jeder Hardware einen Order "variants" mit den diversen pins_arduino.h. Also, wenn man es der IDE verkaufen kann/will dann da.
hi, ich verwende den analog input auch als "langsamen" digital input. hier der code als startpunkt ... mt //********************************************************************** ***************** //inline uint8_t digitalReadADC(uint8_t ch) __attribute__((always_inline)); uint8_t digitalReadADC(uint8_t ch) { //********************************************************************** ***************** ADMUX |= ch - 14; //arduino defined a0=14, a1=15 ... sbi(ADCSRA, ADSC); //start adc while (!ADCSRA & ADIF) continue; sbi(ADCSRA, ADIF); //clear conversion complete flag return ADCH? 1:0; //>0 always logical high! }
Ich weiß nicht genau.... Aber wenn ich zu solchen Tricks greifen müsste, hätte ich das Gefühl was falsch gemacht zu haben. Zumindest würde ich versuchen ein paar Digitalpins frei zu schaufeln. z.B. mit Charlie- oder Multiplexing Oder SPI/I2C Erweiterungen. Oder einen anderen µC wählen
Arduino F. schrieb: > Aber wenn ich zu solchen Tricks greifen müsste, hätte ich das Gefühl was > falsch gemacht zu haben. Ich habe ein Projekt in Arbeit, wo mir am Nano die Ports ausgehen. Da habe ich 9 Tasten mit 8 Widerständen und einem Pullup an einen Analogport geklemmt, bislang hatte ich keinerlei Fehlfunktionen. Die Unterroutine mit switch und case benötigt irgendwas unter 2 Millisekunden, um die Tastennummer auszurechnen. Zuvor lasse ich mir 15ms für Tastenbeep und Prellerkennung, also sehe ich keinerlei Problem, einen A-Port zu verwenden.
> Aber wenn ich zu solchen Tricks greifen müsste, hätte ich das Gefühl > was falsch gemacht zu haben. Dann hast du noch keine 32bit Controller gesehen. Versuche mal bei einem STM32F103 die USB Schnittstelle zu programmieren. Berufliche Software-Entwickler bauen ständig Workarounds, die meisten Programme bestehen in ganz wesentlichen Teilen aus solchen hässlichen Konstrukten. Das tun wir Entwickler nicht, weil wir doof sind, sondern weil wir müssen. Denn wenn das Programm am Liefertermin nicht tut, was es soll, gibt's keine Brötchen. Als Softwareentwickler kannst du nicht sagen: Geht nicht, die Hardware ist Schuld. Das interessiert niemanden. Als Softwareentwickler hängt du immer am Ende einer langen Entwicklungskette. Du musst die Fehler deiner Vorgänger ausbügeln und dabei mit der Zeit auskommen, die sie Dir übrig gelassen haben. Das kostet Nerven, deswegen ist der Job gut bezahlt. Aber du kannst gerne einen idealen µC für deine Anwendung suchen - wenn es ein Hobby ist und Zeit keine Rolle spielt. Im Berufsleben läuft es leider nicht so.
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.