PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino Leonardo/Micro Frage



Andi#87
09.01.2019, 00:26
Hallo,
bisher habe ich einige wenige Sachen mit dem Arduino Uno gemacht. Der hat 14 Digital PIN. Ich habe etwas vor, wo diese 14 PIN zu wenig sind. Mit Shift-Register-PIN-Erweiterung ist es ungünstig aus verschiedenen Gründen. Da bin ich auf den Leonardo bzw. Micro aufmerksam geworden. Beide haben 20 Digital-PIN.
Habe hierzu paar kleine Fragen. Würde mich sehr über eine Antwort freuen.

Kann ich den Leonardo bzw. den Micro über dieselbe Software programmieren, die ich bereits beim Uno verwende?

Sind Leonardo und Micro (abgesehen von der Baugröße) ansonsten identisch?

Beim Uno habe ich das Uno-Board nur zum Programmieren genommen und dann den ATmega328 (RM 2,54) auf eigenen Schaltungen/Platinen verbaut. Könnte ich dasselbe mit dem ATmega 32u4 auch machen? Abgesehen von der frickligen Lötarbeit mit SMD... Die Frage bezieht sich hier nur auf den Vorgang. Ist das dieselbe Handhabung, wie beim 328?

Wenn ich einen 32u4 einzeln kaufe, ist da der Bootloader schon drauf? Falls "nein": kann der Bootloader auch hier wieder wie beim 328 z.B. mit dem AVRISPmkII aufgespielt werden?

Sind die Sketches zwischen Uno, Leonardo/Micro und sogar Mega kompatibel? Sofern ich nicht die Anzahl und Adressierung der I/O überziehe? Könnte ich z.B. einen Sketch, der 20 Digital-I/O benutzt und für den Mega geschrieben ist, "einfach" in den Leonardo/Micro laden (der ja 20 I/O zur Verfügung stellt) und der läuft dort sofort?

Andi

Mxt
09.01.2019, 08:21
Hallo,

ich versuche mal einen Teil zu beantworten:

Ja, Leonardo und Micro sind von der Software her identisch, ich habe schon mehrmals in der Arduino IDE das falsche Board eingestellt, geht trotzdem, der erzeugte Code dürfte aufs Byte identisch sein. Das dürfte auch schon die Frage nach der Programmiersoftware beantworten, soweit es sich um Arduino IDE, Visual Micro, Platformio oder ähnliches handelt.

Es gibt einen wichtigen Unterschied zwischen den 32U4 und 328 basierten Arduinos. Während bei Uno und Co ein zusätzlicher Controller oder ein USB-UART Wandler für die PC-Verbindung sorgt, macht der 32U4 die USB-Verbindung selber. Der Bootlader darauf dürfte also deutlich komplexer sein. Die USB-Verbindung verbraucht übrigens auch gleich wieder den RAM, den der 32U4 gegenüber dem 328 mehr hat.

Dadurch, dass der der Controller die USB-Verbindung selber händelt, kann er auch zusätzlich als andere USB-Geräte arbeiten (ich glaube maximal 4), z.B. Tastatur, Maus oder Joystick. Nicht so schön finde ich das Verhalten der seriellen Schnittstelle beim Programmieren. Anders als Arduinos mit Schnittstellen IC verschwindet der 32U4 nach der Programmierung kurz vom USB-Bus und taucht dann wieder auf. Meist als andere serielle Schnittstelle, meist springt er beim Arbeiten zwischen zwei oder drei Schnittstellennamen. Man muss also in der Arduino IDE dauernd umstellen. Das geht bei anderen Boards, wie dem Teensy deutlich besser. Auch kann man den Leonardo/Micro durch Programmieren dazu bringen, dass er nicht mehr am USB erscheint. Ihn dann wieder zum Leben zu erwecken ist ziemlich umständlich (Reset Taste genau im richtigen Moment loslassen), das ist beim Teensy deutlich besser gelöst (der Bootlader ist auf einem externen IC, den kann man am Controller nicht kaputtprogrammieren).

Im Prinzip sollten Sketches übertragbar sein, der 32U4 weicht aber bei den Timern und diversen IO-Registern vom 328 ab. Je nachdem wie systemnah die Sketches sind, können da Änderungen nötig sein.

Ich hoffe da hilft schon mal etwas ;)

Andi#87
09.01.2019, 10:04
Vielen Dank Mxt. Klingt bissl nach "könnte leicht Problemchen bereiten"...(?) mit dem 32u4, bei denen ich dann möglicherweise als grosses Fragezeichen vorm Rechner sitze ;-)
Und der MEGA? Sind Uno-Sketches 1:1 auf den MEGA übertragbar und umgekehrt (sofern 14 Digital PIN nicht überschritten werden)? Vielleicht gehe ich gleich den Schritt zum MEGA. Dann muss eben in jede Applikation ein komplettes MEGA-Board eingebaut werden und ich muss mich verabschieden von meiner bisherigen Handhabung, den ATmega separat zu verlöten, nachdem er programmiert wurde...

Andi

Mxt
09.01.2019, 12:24
Also zum Mega kann ich relativ wenig spezifisches beitragen. Es gibt den 2560 auf jeden Fall in diversen Gehäusen, ich habe kürzlich ein als Arduino Mega zu programmierendes Board gesehen, was doch deutlich kleiner war, als ein typisches Arduino Board.

Unterschiede zum 328 wird es bei Timern, Pins und Ports auf dem Mega auch geben, das ist aber sicher lösbar. Ich arbeite fast nur noch mit den Teensy 3.x, die sind als NXP Kinetis Controller sehr unterschiedlich zu den AVR, man kriegt aber die meisten Sketche relativ einfach angepasst. Die Teensy Boards sind ja auch recht klein, ich bin da noch nie auf den Gedanken gekommen, für ein kleines Privatprojekt den Controller einzeln zu verbauen (erst recht nicht die im BGA-Gehäuse).

Rabenauge
11.01.2019, 12:04
Nimm doch einfach nen Portexpander.
Dann kannst du hunderte Digitalpins haben....

Andi#87
13.01.2019, 10:36
Bei Verwendung eines Portexpander kann ich immer nur eine Taste simultan verwenden. Drücke ich mehrere Tasten gleichzeitig, wird dies durch die Logik des Portexpander dennoch als eine (völlig andere) Taste interpretiert. Gehen die Tasten jedoch direkt einzeln in einen eigenen Digital-In, so wird jede Taste entsprechend interpretiert, auch bei gleichzeitigem drücken mehrerer Tasten.

Andi



Ich hab mir das mal mit den Teensy angeschaut. Klingt recht gut. Ausreichend DigitalPIN, geringe Baugröße (die kann man gut direkt auf einer anderen Platine mit auflöten). Und das Anpassen der Arduino-Sketches scheint nicht so kompliziert zu sein. Habe da noch nicht weiter gegoogelt, aber ich denke, auch für die Anpassung der Sketches werde ich fündig werden.

Andi

Rabenauge
14.01.2019, 10:56
Dann verschalt die Tasten als Matrix.
Guck mal, das geht mit nem Uno schon: https://www.youtube.com/watch?v=lXX8v-ZW6Tk
Hast du so viele Tasten?

Ich lese ein 61-Tasten-Keyboard _ohne_ Portexpander mit nem Mega 2560 ganz problemlos ein- und ja: auch mehrere Tasten simultan.

Andi#87
18.01.2019, 13:41
Ich verstehe nicht, wie das funktionieren soll. Ein Portexpander-IC macht letztlich nichts weiter, als eine typische Binär-Matrix zu erstellen bzw. abzufragen. Also, z.B.: 0-0-0, 0-0-1, 0-1-0, 0-1-1, 1-0-0-, 1-0-1 usw. Wenn ich nun 2 Tasten gleichzeitig drücke, entsteht doch dort ein völlig anderes "Gebilde". Oder hab ich hier einen Denkfehler?

Andi

HaWe
18.01.2019, 19:27
Ich verstehe nicht, wie das funktionieren soll. Ein Portexpander-IC macht letztlich nichts weiter, als eine typische Binär-Matrix zu erstellen bzw. abzufragen. Also, z.B.: 0-0-0, 0-0-1, 0-1-0, 0-1-1, 1-0-0-, 1-0-1 usw. Wenn ich nun 2 Tasten gleichzeitig drücke, entsteht doch dort ein völlig anderes "Gebilde". Oder hab ich hier einen Denkfehler?

Andi

hängt sicher vom Portexpander ab, aber (IIRC) z.B. beim PCF8574 kannst du alle Werte als Byte-Mask für pins 0-7 gemeinsam abrufen. Sind z.B. Pins 0, 3 und 4 gedrückt und der Rest nicht, ist das Bitmuster 00011001.

Andi#87
18.01.2019, 19:36
Aha. Ok, vielen Dank.
In welchem Zeitintervall werden dann diese DigitalPIN vom Prozessor abgefragt? Ist das im unteren Millisekundenbereich?

Andi

Rabenauge
18.01.2019, 21:05
Nö- von alleine fragt der gar nix ab.
Entweder du benutzt Interrupts (dann merkt er automatisch, wenn du was drückst oder loslässt) oder aber du sagst ihm, wie oft er die Eingänge abfragen soll.
Da ich weder mit Leonardos noch mit Micros arbeite, weiss ich nicht, wie lange das Einlesen dauert, aber da es um digitale Eingänge geht, wirds nicht schlimm sein (analog dauert ein klein bisschen) auf jeden Fall weit schneller als man Tasten drücken könnte- denk dabei auch ans entprellen.
Bei manuell betätigten Tasten sind Frequenzen im einstelligen Millisekundenbereich völlig illusorisch (so schnell _kann_ man sie nicht drücken), wenn du die also alle 2/100s einliest (und das geht, wenn man nich im Hautprogramm rumtüdelt), wird das vollkommen reichen.
Wie gesagt: entprellt werden muss sowieso, egal wie man das anstellt: es wird länger dauern als das Einlesen selber.

Falls du es wirklich genau wissen musst: Dokus lesen. Irgendwo auf den Arduino-Seiten (den richtigen, nich abgeschriebener Kram) steht, wie man die Zeit, die die loop() für einen Durchlauf braucht, messen kann.
So kannst du leicht ermitteln, wie schnell alles läuft.

HaWe
19.01.2019, 10:30
einfach ausgedrückt, kannst du die PCF8674-Pin-Zustände genau so abfragen wie Pinzustände an den GPIO-Pins, nämlich in immer wiederkehrenden Schleifen oder per Timer- oder per Pinchange-Interrupts.
Da der PCF8674 aber über i2c gesteuert wird, können höchstens alle (ca) 5ms die Werte aktualisiert werden, während sich GPIOs im 10-Nanosenkundenbereich abfragen lassen.
Hinzu kommt, dass in Interruptroutinen die i2c-Abfrage blockieren kann und die dann u.U. nicht immer ganz "rund" läuft.
Weiterer Nachteil von PCF8574 u.ä. ist, dass sie sich nicht immer auch für pwm verwenden lassen, da sie zu langsam reagieren.
Kommt es dir also auf viele Pins auch für zeitkritische Anwendungen an, helfen IMO nur andere MCUs mit von sich aus vielen GPIO-Header-Pins, wie Arduino Mega2560 oder Due.

Andi#87
19.01.2019, 14:43
Danke für Eure Antworten. Soooo zeitkritisch ist es nicht. Ich möchte das - einfach ausgedrückt - in eine Art Gegensprechanlage integrieren. RUF-Taste drücken und sprechen. Da sind Millisekunden mehr als ausreichend. Ich hatte Bedenken, dass das möglicherweise im Sekundentakt abgefragt wird.

Interrupts klingen eigentlich für diese Anwendung recht interessant. Aber hier heißt es wohl auch: aufpassen. Aus dem Bauch heraus: würdet Ihr das, was ich plane, per Interrupts realisieren, oder per Loop-Schleife?

Andi

HaWe
19.01.2019, 15:58
Danke für Eure Antworten. Soooo zeitkritisch ist es nicht. Ich möchte das - einfach ausgedrückt - in eine Art Gegensprechanlage integrieren. RUF-Taste drücken und sprechen. Da sind Millisekunden mehr als ausreichend. Ich hatte Bedenken, dass das möglicherweise im Sekundentakt abgefragt wird.

Interrupts klingen eigentlich für diese Anwendung recht interessant. Aber hier heißt es wohl auch: aufpassen. Aus dem Bauch heraus: würdet Ihr das, was ich plane, per Interrupts realisieren, oder per Loop-Schleife?

Andi

da ich dein Programm und deine Hardware nicht kenne, würde ich es ausprobieren

Andi#87
19.01.2019, 18:12
Es gibt noch kein Programm. Mit Portexpander hab ich noch nicht gearbeitet.
Als Board dachte ich an einen UNO.

Andi

HaWe
19.01.2019, 19:59
dann nimm doch gleich nen Mega, der hat mehr Ports und ein Uno hat außerdem sowieso extrem wenig RAM - das macht auf Dauer eh keinen Spaß.

Andi#87
19.01.2019, 20:38
Stimmt schon. Aber der UNO hat den großen Vorteil, dass man ihn nachbauen kann und dadurch (s)ein komplettes Platinenlayout erstellen kann. Beim MEGA geht das nicht. Da muss man den kompletten MEGA verwenden. Zumindest habe ich nicht die technischen Möglichkeiten und vermutlich auch nicht die Fähigkeiten, diesen Chip in seinem kleinen Rastermaß auf eine eigene Platine zu setzen. Für meine geplante Anwendung ist das ein entscheidendes Kriterium. Der verfügbare RAM sollte für die Schaltaufgaben incl Portexpander ausreichend sein.

Andi

HaWe
19.01.2019, 20:58
tja mein Lieber, da musst du dich jetzt halt entscheiden ;)

Wolle62
19.01.2019, 23:13
dann nimm doch gleich nen Mega, der hat mehr Ports und ein Uno hat außerdem sowieso extrem wenig RAM - das macht auf Dauer eh keinen Spaß.
Genau das RAM Problem kommt gerade auf mich zu, deshalb zur Sicherheit nur die beiden Fragen:

Meine Sketche vom Uno laufen (von Portanpassungen abgesehen) auf dem Mega?
Der Mega arbeitet mit 5V wie der Uno ?

HaWe
20.01.2019, 07:12
Meine Sketche vom Uno laufen (von Portanpassungen abgesehen) auf dem Mega?

Kann man erst mit Sicherheit sagen, wenn man die Sketche kennt: meistens ja, aber selten mal auch nicht.


Der Mega arbeitet mit 5V wie der Uno ?
Ja!

Andi#87
26.01.2019, 12:09
Nochmal zu dem Portexpander. Der erweitert die Anzahl der DigitalPIN. Ist der dann genauso zu handhaben? Kann dann jeder diese „neuen“ DigitalPIN entweder als Input oder Output festgelegt und genutzt werden? Oder kann man dann alle „neuen“ DigitalPIN, die über den Portexpander laufen, entweder nur als Input oder nur als Output verwenden? Also nicht gemischt?

Andi

HaWe
26.01.2019, 12:53
Nochmal zu dem Portexpander. Der erweitert die Anzahl der DigitalPIN.

Ist der dann genauso zu handhaben?
kommt auf den genauen Typ an, sicher aber höchstens ähnlich, nie 100% identisch


Kann dann jeder diese „neuen“ DigitalPIN entweder als Input oder Output festgelegt und genutzt werden?
durchaus möglich, bei PCF8574 ja


Oder kann man dann alle „neuen“ DigitalPIN, die über den Portexpander laufen, entweder nur als Input oder nur als Output verwenden?
Frage ist redundant, aber zur Sicherheit: nicht eingeschränkt bei PCF8574


s.z.B. PCF8574
https://playground.arduino.cc/Main/PCF8574Class

s. aber auch MCP23017, der ist noch leistungsfähiger:
https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library

Andi#87
26.01.2019, 13:58
Danke. Hatte ich vergessen: ja, ich bezog mich auf den 8574...
Mit dem 23017 bzw 23016 hatte ich auch schon mal gearbeitet, aber in einem ganz anderen Zusammenhang.

Andi