Mega 2560

Moderator: suntri

Antworten
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Mega 2560

Beitrag von Ingo63 »

Hallo in der Gemeinde,
gibt hier ja bestimmt den einen oder anderen der fit mit Arduino ist.
Will mir ja Arbeit sparen und daher mein thread.
habe mir einen ARD-MEGA2560PRO zugelegt, ist klein 55 x 38 mm.
Nun mein Ziel: Möchte gern neun Analoge Signale auf neun Bargraphleisten abbilden.
Die A-Signale 1 bis 6 auf 11 Bit und die A-Signale 7 bis 9 auf 16 Bit.
Lediglich eine LED soll je Bargraphleiste leuchten.
Sollten also 16 Datenleitungen für die LED's und 9 Datenleitungen für die Schalttransistoren sein.
Das Analoge Signal gibt je ein Poti ( 0 bis 5 Volt )
Also im Rundlauf neun Analogsignale.
Und noch ein Bild vom ARD-MEGA2560PRO:
ARD-MEGA2560PRO_02.jpg
ARD-MEGA2560PRO_02.jpg (31.16 KiB) 1236 mal betrachtet
ARD-MEGA2560PRO_02.jpg
ARD-MEGA2560PRO_02.jpg (31.16 KiB) 1236 mal betrachtet
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Benutzeravatar
JeanLuc7
Fast schon Admin
Fast schon Admin
Beiträge: 675
Registriert: 09.02.2011, 16:07
Wohnort: Berlin
Kontaktdaten:

Re: Mega 2560

Beitrag von JeanLuc7 »

Salut Ingo,

ich habe mir den ATMega2560 mal angeschaut. Wenn ich das Datenblatt richtig lese, hat er einen "16-channel, 10-bit ADC", also 16 A/D-wandler, die aber jeweils nur mit 10 Bit auflösen. Die 10 Bit entsprechen dem, was ich von den "kleineren" ATMegas kenne. Insofern wird es schwierig, auf 11 Bit oder gar 16 Bit Auflösung zu kommen. Ich empfehle zudem, die ADC-Kanäle nicht frei fließen ("floating") zu lassen, sondern getaktet bewusst einen nach dem anderen abzufragen, und zwar mehrfach, bis sich das Signal eingependelt hat. Meine Erfahrung war, dass die Messungen sich ansonsten gegenseitig beeinflussen. Die Wandlerfrequenz sollte auch so niedrig wie möglich sein - umso genauer wird das Ergebnis.

Die Ausgangsschaltung hingegen sollte kein großer Akt sein. 16 Ausgänge schaltest Du parallel an alle Bragraphs, die weiteren 9 Ausgänge werden im Takt nacheinander aktiviert. Allzu hoch braucht der nicht zu sein, 500 Hz sollten für eine flackerfreie Ansteuerung völlig reichen. Schalttransistoren sind empfehlenswert, auch wenn genau genommen bei nur jeweils einer aktiven LED auch der Ausgangsstrom des ATMega reichen sollte. Da aber die LEDs jeweils nur 1/9 der Zeit aktiv sind, kann man sie in dieser Zeit mit einem höheren Ausgangsstrom belasten, damit sie heller leuchten. Das schafft dann der ATMEga nicht.

Ich nehme an, Du programmierst dann auch in der Arduino-Umgebung. Dort ist ja alles gekapselt, so dass Du automatisch die richtigen Eingänge aktivierst, wenn Du die A/D-Wandler nutzt (sie liegen an den Pins PF0 bis PF7 bzw. PK0 bis PK7). Die anderen Ausgänge sind reine Schaltausgänge und daher einfach zu benutzen.

Grüße, JL7/Frank
Dateianhänge
ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf
(4.68 MiB) 56-mal heruntergeladen
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Re: Mega 2560

Beitrag von Ingo63 »

Hallo Frank,
danke für eine erste Antwort.
JeanLuc7 hat geschrieben: 03.05.2022, 11:26 Wenn ich das Datenblatt richtig lese, hat er einen "16-channel, 10-bit ADC", also 16 A/D-wandler, die aber jeweils nur mit 10 Bit auflösen. Die 10 Bit entsprechen dem, was ich von den "kleineren" ATMegas kenne. Insofern wird es schwierig, auf 11 Bit oder gar 16 Bit Auflösung zu kommen.
Tatsächlich reichen die 10 Bit für meinen Zweck völlig aus.
LED.jpg
LED.jpg (47.67 KiB) 1184 mal betrachtet
LED.jpg
LED.jpg (47.67 KiB) 1184 mal betrachtet
JeanLuc7 hat geschrieben: 03.05.2022, 11:26 Da aber die LEDs jeweils nur 1/9 der Zeit aktiv sind, kann man sie in dieser Zeit mit einem höheren Ausgangsstrom belasten, damit sie heller leuchten. Das schafft dann der ATMEga nicht.
Nehme natürlich Schalttransistoren, ist einfach sicherer.

Nun aber zum eigentlichen, bin ja manchmal faul und möchte mir Arbeit sparen :lol:
Fertige Beispiele gibt es ja zu Hauf, aber fast immer mit einer Leuchtkette und nicht mit einem Leuchtpunkt.
Werde jetzt den Analogwert einlesen und der LED im Wertebereich zuordnen und diese aktivieren.
Bei begin der loop alle LED's aus.
Neun Durchläufe und das Ganze von neuem.

Das Ganze soll endlich mein neues Experimentiersystem werden.
Ins Pult1 kommen sechs Potis, sind alles Stereopotis und drei Drehkos.
Und nun mein Wunsch: Der zweite Teil der Stereopotis gibt den Analogwert und soll LED's von 0 bis 10 leuchten lassen, sind 11 stück auf 270 Grad.
Zum Drehko wird zur Achse ein Poti montiert. Der Drehko hat nur 180 Grad. Währen 11 LED's auf 180 Grad und 16 auf 270 Grad. Brauche also auch hier nur 11 LED's, muss aber auf 16 auswerten.
Schalter und Taster werden auch mit LED's versehen :lol:
Vier Gehäuse vom Typ Teko Pult 363.8 habe ich auch schon.
Sollen seitlich steckbar via Messerleite werden, für die Stromversorgung und Datenleitungen.
Liegt alles schon seit anfang des Jahres bei mir auf der Werkbank.
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Benutzeravatar
JeanLuc7
Fast schon Admin
Fast schon Admin
Beiträge: 675
Registriert: 09.02.2011, 16:07
Wohnort: Berlin
Kontaktdaten:

Re: Mega 2560

Beitrag von JeanLuc7 »

Wow, klingt schick - Potis und Drehkos mit LED-Stellanzeige. Ich hab da leider nichts fertiges in "Arduino" vorliegen, weil ich die ATMegas direkt in C programmiere. Das ist zwar aufwändiger, aber auch erheblich schneller, weil die ganzen internen Schleifen, die Arduino zur Kapselung nutzt, wegfallen.

Grundsätzlich kannst Du aber auch als Grundlage eine Bar-Anzeige mit zunehmenden LEDs nutzen. Die Ausgänge werden dort eben nach und nach zugeschaltet - du musst lediglich dafür sorgen, dass der vorher aktive Ausgang abgeschaltet wird. Notfalls versuch es erst mit einer-Bar-Anzeige und poste den Code hier mal rein - die eine oder zwei fehlenden Zeilen haben wir dann schnell ergänzt.

Ich persönlich würde ja als Anzeige das GTM nehmen, die gemessenen Werte per serieller Schnittstelle übermitteln und graphisch anzeigen - per Zeiger, Balken oder wie auch immer. Mit einem 3,5"- oder 4,3"-Display ließe sich da schon einiges an schicker Oberfläche machen - man könnte bei den Potis sogar den echten Widerstandswert hinschreiben, und du hättest echte 10 Bit, also 1024 Stufen, nicht bloß 11 wie bei den LEDs. ;-)

Viele Grüße
JL7/Frank
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Re: Mega 2560

Beitrag von Ingo63 »

Hallo Frank,
die Sprache ist mir total egal.
Aber der ARD-MEGA2560PRO ist halt ein Arduino.
Und für diese Aufgabe reicht es.
Grafische Darstellung folgt in Pult2 und Pult3.
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Benutzeravatar
suntri
Administrator
Administrator
Beiträge: 1619
Registriert: 30.04.2006, 16:54
Wohnort: Bei Basel (CH)
Kontaktdaten:

Re: Mega 2560

Beitrag von suntri »

Ob davon was verwender werden kann.
https://mschoeffler.com/2020/11/14/ardu ... p-ws2812b/
Gruss suntri

Erkläre es mir, ich werde es vergessen. Zeige es mir, ich werde es vielleicht behalten. Lass es mich tun, und ich werde es können. Indisches Sprichwort.
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Re: Mega 2560

Beitrag von Ingo63 »

Hallo Thomas,
schön auch was von dir zu lesen.
suntri hat geschrieben: 03.05.2022, 21:58 Ob davon was verwender werden kann.
https://mschoeffler.com/2020/11/14/ardu ... p-ws2812b/
Leider nicht, habe was eigenes angefangen, sollte ja nicht schwer sein.
Pins definieren und eine Schleife basteln.
Da ich genug Platz im Speicher habe, muss es nicht sauber programmiert sein.
Spaghetticode tut es auch :lol:
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
wolfgang
Fast schon Admin
Fast schon Admin
Beiträge: 847
Registriert: 26.03.2009, 09:48
Wohnort: Karlsruhe

Re: Mega 2560

Beitrag von wolfgang »

Also ich würde die 16 Anschlüsse für die LEDs auf zwei Register zu verteilen. Den Code nach folgendem Prinzip:

16bit-Variable für Messwert auf 0 setzen
vier mal messen und Wert in Variabler addieren
Messwert / 256

Danach sollte in der Variable Messwert je nach Potistellung 0 - 15 stehen.

16bit-Variable für Anzeige auf 1 setzen
Eine Schleife je Messwert 0-15 mal durchlaufen und dabei Variable mit 2 multiplizieren

Danach hast Du deine Anzeigevariable in der je Potistellung eine 1 und 15 nullen stehen, diese Variable kannst du dann auf die IO-Register schreiben

Gruß
Wolfgang
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Re: Mega 2560

Beitrag von Ingo63 »

Hallo Wolfgang,
danke für deinen Beitrag.
für 16 Bit habe ich diese Lösung auch schon gefunden.
Für 11 Bit habe ich keine Lösung gefunden, nur den Messwertbereichsvergleich, sprich: Ist der Wert von bis mach LED X an.
Geht via if - else xxx mal und schon fertig :lol:
Freue mich auf eine bessere Lösung.
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
wolfgang
Fast schon Admin
Fast schon Admin
Beiträge: 847
Registriert: 26.03.2009, 09:48
Wohnort: Karlsruhe

Re: Mega 2560

Beitrag von wolfgang »

Das ist doch auch recht einfach möglich.

Den Offset subtrahieren und einen anderen Teiler verwenden. Egal wo der Messbereich beginnt und endet, zum Schuss muss der Wertebereich 0 - 15 übrigbleiben - oder 0 - 10 bei 11 LEDs.

Wenn du es ganz schick machen willst, kannst du einen Konfigurationsteil einbauen. Einen Taster an einen freien Eingang, beim Start den Taster einmalig abfragen um die Konfiguration zu starten:

- beim Start Taster drucken
- alle Regler auf kleinsten Wert
- mit Tastendruck wird der Offset gemessen
- alle Regler auf höchsten Wert
- mit Tastendruck wird der Maximalwert gemessen
- Die Messwerte ins EEPROM schreiben

Mit den LEDs kann dann noch eine optische Rückmeldung über die Eingabe erfolgen.

Bei normalen Start werden die Offset- und Maximalwerte aus dem EEPROM gelesen um für jeden Regler einen angepassten Anzeigebereich zu erhalten.

Gruß
Wolfgang
Benutzeravatar
Ingo63
Fast schon Admin
Fast schon Admin
Beiträge: 731
Registriert: 25.12.2012, 19:05
Wohnort: Kaltenkirchen SH

Re: Mega 2560

Beitrag von Ingo63 »

Hallo Wolfgang,
danke für die tolle Lösung, werde ich im zweiten schritt mal ausprobieren.
Im ersten schritt ist es mir zu hoch, soweit bin ich nicht :lol:
Brauche dann immernoch ein Beispiel, Programmcode anpassen ist immer leichter wie von null auf hundert.
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Antworten

Zurück zu „Arduino“