Mega 2560
Moderator: suntri
Mega 2560
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:
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:
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
- JeanLuc7
- Fast schon Admin
- Beiträge: 676
- Registriert: 09.02.2011, 16:07
- Wohnort: Berlin
- Kontaktdaten:
Re: Mega 2560
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
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) 58-mal heruntergeladen
- ATmega640-1280-1281-2560-2561-Datasheet-DS40002211A.pdf
- (4.68 MiB) 58-mal heruntergeladen
Re: Mega 2560
Hallo Frank,
danke für eine erste Antwort.
Nun aber zum eigentlichen, bin ja manchmal faul und möchte mir Arbeit sparen
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
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.
danke für eine erste Antwort.
Tatsächlich reichen die 10 Bit für meinen Zweck völlig aus.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.
Nehme natürlich Schalttransistoren, ist einfach sicherer.
Nun aber zum eigentlichen, bin ja manchmal faul und möchte mir Arbeit sparen
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
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 ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
- JeanLuc7
- Fast schon Admin
- Beiträge: 676
- Registriert: 09.02.2011, 16:07
- Wohnort: Berlin
- Kontaktdaten:
Re: Mega 2560
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
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
Re: Mega 2560
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.
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 ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
- suntri
- Administrator
- Beiträge: 1620
- Registriert: 30.04.2006, 16:54
- Wohnort: Bei Basel (CH)
- Kontaktdaten:
Re: Mega 2560
Ob davon was verwender werden kann.
https://mschoeffler.com/2020/11/14/ardu ... p-ws2812b/
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.
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.
Re: Mega 2560
Hallo Thomas,
schön auch was von dir zu lesen.
Pins definieren und eine Schleife basteln.
Da ich genug Platz im Speicher habe, muss es nicht sauber programmiert sein.
Spaghetticode tut es auch
schön auch was von dir zu lesen.
Leider nicht, habe was eigenes angefangen, sollte ja nicht schwer sein.suntri hat geschrieben: ↑03.05.2022, 21:58 Ob davon was verwender werden kann.
https://mschoeffler.com/2020/11/14/ardu ... p-ws2812b/
Pins definieren und eine Schleife basteln.
Da ich genug Platz im Speicher habe, muss es nicht sauber programmiert sein.
Spaghetticode tut es auch
MfG
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Re: Mega 2560
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
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
Re: Mega 2560
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
Freue mich auf eine bessere Lösung.
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
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 ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).
Re: Mega 2560
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
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
Re: Mega 2560
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
Brauche dann immernoch ein Beispiel, Programmcode anpassen ist immer leichter wie von null auf hundert.
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
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 ).
Ingo
_____________________________________________________________________________
Und werft nie ein Q wenn ihr die Folgen nicht abschätzen könnt ( frei nach Douglas Adams ).