Forum: Mikrocontroller und Digitale Elektronik Frage zur Typen-Auswahl AVR


von Andreas G. (andreas_g498)


Lesenswert?

Hallo,

Ich bräuchte mal euer Schwarmwissen.
Welchen ATTINY oder ATMEGA, der zZ auch käuflich zu erweben ist, würdest 
ihr für folgende Funktionen benutzen ?
- I2C Slave
- 2 ADC mit der Vorgabe einer Differnzspannungsmessung ( szs 4 Pins )
- und 8 Ausgängen für einen PWM gesteuerten Leuchtbalken oder Leuchtband

Zur Funktionserklärung:
Die Auswertung der ADC ergibt einen mathematisch gemittelten Wert bis 
1024. Verteilt auf die 8 LEDs soll die erste LEDS in 128 Schritten 
zunehmend bis zur max Helligkeit hochgeregelt werden, dann die zweite 
LED auch wieder bis zur max. Helligkeit usw. Bis bei 1024 alle 8 LEDs 
mit maximaler Helligkeit leuchten. Rein von der PWM Fähigkeit wird 
sozusagen immer nur maximal eine LEDs über PWM angesteuert. Alle anderen 
sind entweder aus, oder an.
Bezüglich des I2C Ausgangs, soll nur im Falle einer Änderung des 
Meßwertes eine Ausgabe über den Bus erfolgen.

Es gibt bezüglich der möglichen Baugröße keine Beschränkungen, nur die 
Betriebsspannung der Schaltung ist mit 4,8 V vorgeben. Dennoch möchte 
ich nicht unbedingt den größen ( Baugröße ) verfügbaren Typ einsetzen.

Danke schon einmal für die Antworten

Gruß

von m.n. (Gast)


Lesenswert?


von Andreas B. (bitverdreher)


Lesenswert?


: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Andreas G. schrieb:
> Dennoch möchte ich nicht unbedingt den größen ( Baugröße ) verfügbaren
> Typ einsetzen.

VCC GND XTAL1 XTAL2 + deine 14 sind 18 pins, aber ein ATmega8 in TQFP32 
ist eher kleiner als man löten mag, ATtiny24 ist in DIP grösser.
PWM für LED kann jeder uC in Software, Differenzmessung kann ein ADC 
auch in Software.

Das Problem liegt woanders: 10 bit ADC ist instabil auf den letzten 2 
bits. Der Messwert schwankt ständig. Bei der PWM sieht man das nicht, 
aber per I2C wird ständig gesendet. Du musst dir eine klügere 
Auswertungsstrategie überlegen.

von Programmierer (Gast)


Lesenswert?

Andreas G. schrieb:
> Bezüglich des I2C Ausgangs, soll nur im Falle einer Änderung des
> Meßwertes eine Ausgabe über den Bus erfolgen.

Ein I²C Slave kann nicht spontan etwas über den Bus senden, sondern muss 
immer vom Master angefragt werden. Also entweder:
- Auf Anfrage einfach immer direkt den Messwert zurück schicken
- Auf Anfrage, bei unverändertem Wert nichts zurück senden (finde ich 
nicht so toll)
- Bei verändertem Wert einen Pin setzen, den der I²C-Master dann als 
Interrupt-Eingang verwenden kann um dann den aktuellen Wert abzufragen 
(machen viele I²C-Sensoren so)

Andreas G. schrieb:
> - 2 ADC mit der Vorgabe einer Differnzspannungsmessung ( szs 4 Pins )

Meinst du eine differentielle Messung? Soweit ich weiß können (die 
meisten?) AVRs das nicht. Also höchstens in Software subtrahieren.

von Andreas G. (andreas_g498)


Lesenswert?

Hallo,

Danke erst einmal für die schnellen Antworten.
Aus der Liste vom @Andreas B. (bitverdreher) konnte ich einen Chip-Serie 
herausfiltern, welche eine differnzielle Messung auf der HW Ebene 
zulässt. Das wären die 261 / 461er.

Bezüglich der Aussage von @MaWin bin ich jetzt etwas verwirrt.
Da ich schon wiederholt MCP320x ADC Wandler, wenn diese auch eine höhere 
Auflösung besitzen, verwendet habe, kann ich diese Aussage zumindest für 
externe ADCs nicht teilen. Könntest du das bitte etwas detailierter 
Ausführen, warum ausgerechnet ADCs in AVR derartige Fehler produzieren 
sollten ?

Bezüglich der Frage von @Programmierer erscheint mir der Vorschlag mit 
dem Interrupt die Lösung zu sein, die dann wohl auch so zur Umsetzung 
kommen wird. Damit müsste ich szs nur auf einen PIN ein HIGH Pegel 
legen, den der I2C Master als Interruptaufforderung versteht ?

Gruß

von Andreas B. (bitverdreher)


Lesenswert?

MaWin schrieb:
> in TQFP32
> ist eher kleiner als man löten mag
Nicht "man", sondern Du. Jeder hat da andere Praeferenzen.
Und wenn bei Dir 10-Bit Messungen auf 2 Bits schwanken, hast Du andere 
Probleme. Sichere 9-Bit bekommt man auf jeden Fall hin.

von Programmierer (Gast)


Lesenswert?

Andreas G. schrieb:
> Damit müsste ich szs nur auf einen PIN ein HIGH Pegel
> legen, den der I2C Master als Interruptaufforderung versteht ?

Je genau, wobei glaube ich die meisten Sensoren einen Active-Low-Pegel 
nutzen, d.h. Low=Interrupt. Nicht vergessen den Pin zurückzusetzen 
nachdem der Wert abgefragt wurde.

MaWin schrieb:
> Das Problem liegt woanders: 10 bit ADC ist instabil auf den letzten 2
> bits. Der Messwert schwankt ständig. Bei der PWM sieht man das nicht,
> aber per I2C wird ständig gesendet

Man kann ja ein "Fenster" vorsehen, d.h. erst bei Abweichung um Wert X 
vom zuletzt gesendeten Wert wird die Änderung signalisiert, oder 
spätestens nach 10ms oder so.

von Andreas G. (andreas_g498)


Lesenswert?

Hallo,

und danke @Programmierer.

Das war mir schon klar, dass ich vor der eigentlichen Datenübermittlung 
den Pegel auf dem Interrupt-Pin wieder zurücksetzen muss.

Ja, ein Vergleicher, oder wie du sagtst ein Änderungsfenster erscheint 
mir hier noch etwas voreilig zu sein. Bisher habe ich meine ADC 
Anschlüsse auf der Platine immer wie folgt aufgebaut, und damit bin ich 
bis jetzt immer sehr gut gefahren. Unmittelbar an den Schlussklemmen 
habe ich einen 100nF Kerko gesetzt, der beide Schraubklemmen miteinander 
verbindet. Wobei einer der Anschüsse mit GND verbunden ist. Dann folgte 
ein Spannungsteiler, bei dem ich den R2 immer so bei 2K bis 2,7K 
ausgelgt habe, um weitere HF Störungen zu eliminieren. Am Ausgang des 
Spannungteilers habe ich diesen mit einem 15pF mit der Vc des ADC und 
mit 33pF gegen GND verbunden, und das auf der Platine erst unmittelbar 
vor dem Eingangspin des ADC. Selbst mit offen und sehr langen Drahtenden 
bis 130 Meter ( die hier eher wie eine Antenne wirken ) habe ich damit 
saubere Messergebnisse. Selbst bei unterschiedlichen Kabellängen konnte 
ich mit Hilfe einer Referenzspannungsquelle keine, oder eher nur zu 
vernachlässigende Wertabweichungen feststellen. Ebenso keine Störungen 
die durch andere elektr. Geräte in einem landwirtschaftlichen Umfeld zu 
finden sind.
Damit gehe ich mal davon aus, dass @MaWin wohl ein Problem mit der 
Entstörung, oder einem störenden Umfeld hat.

Gruß

von c-hater (Gast)


Lesenswert?

Programmierer schrieb:

> eine differentielle Messung? Soweit ich weiß können (die
> meisten?) AVRs das nicht.

Och, ist gibt schon eine ganze Menge, die das können. Angefangen vom 
Mega16, der schon ziemliches Urgestein ist, bis hin zum Mega1284P z.B. 
die ganze Reihe der 40(44)-Pinner. Aber auch am anderen Ende der 
"Pinnigkeit" die Tiny25/45/85. Dazwischen z.B. noch die Tiny441/841 und 
Tiny24A/44A/84A. Und ganz oben bzgl. der Pinnigkeit auch die Mega1280, 
1281, 2560, 2561

Und auch die neueren AVRs können es, ganz sicher z.B. die AVR128Dyxxx.

Und ich bin ziemlich sicher, es gibt noch etliche mehr, bin bloß zu 
faul, die rauszusuchen. Die oben Genannten hatte ich diesbezüglich im 
Kopf, dafür brauchte ich nichtmal nachschauen.

Mir scheint: die überwältigende Mehrheit der AVR8, die überhaupt einen 
ADC haben, können auch differentiell messen.

von Wolfgang (Gast)


Lesenswert?

Andreas G. schrieb:
> 2 ADC mit der Vorgabe einer Differnzspannungsmessung ( szs 4 Pins )

Zwei ADCs gibt es IMHO weder bei den ATtinys noch bei den ATmegas. Die 
besitzen einen einzigen ADC mit einem Multiplexer davor. Direkte 
Differenzspannungsmessung geht damit dann prinzipiell nicht.

von c-hater (Gast)


Lesenswert?

Wolfgang schrieb:

> Zwei ADCs gibt es IMHO weder bei den ATtinys noch bei den ATmegas.

Das ist wohl korrekt. Ich jedenfalls kenne auch keinen AVR8 mit zwei 
ADCs.

> Direkte
> Differenzspannungsmessung geht damit dann prinzipiell nicht.

Das allerdings ist Unsinn. Der eine ADC kann das (jedenfalls bei sehr 
vielen) AVR8. Es wird halt nicht gegen GND gemessen, sondern gegen einen 
anderen Pin.

von Andreas G. (andreas_g498)


Lesenswert?

Hallo @Wolfgang,

Hier mal das Sheet zu einer Typenserie die das sehr wohl kann ;)

https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2588-8-bit-AVR-Microcontrollers-tinyAVR-ATtiny261-ATtiny461-ATtiny861_Datasheet.pdf

Wie schon auf Seite 1 zu lesen :
• 16 Differential ADC Channel Pairs

Das nur mal so, um dich auf dem Laufenden zu halten ;)

von Andreas G. (andreas_g498)


Lesenswert?

Hallo @c-hater,

Bevor hier ein Krieg um die ADCs und deren Möglichkeiten ausbricht, die 
ATtiny1614/1616/1617 haben 2 getrennte ADCs drin.
zZ gibt es ohne hin nur den kleinen Bruder, den 1614, und der reicht mir 
von der PIN-Anzahl her nicht aus. Auf dem Schirm hatte ich den Typen 
auch schon, scheiderte jedoch an der aktuellen Beschaffungslage.
Also muss nun ein 461 her, und dann hoffe ich das ich das so hinbekomme 
wie angedacht.

Danke noch einmal ab alle

Gruß

von c-hater (Gast)


Lesenswert?

Andreas G. schrieb:

> Bevor hier ein Krieg um die ADCs und deren Möglichkeiten ausbricht, die
> ATtiny1614/1616/1617 haben 2 getrennte ADCs drin.

Stimmt. Wie man sehen kann, entwickelt sich die AVR8-Architektur halt in 
vielen Richtungen weiter, entgegen den Voraussagen derer, die sie auf 
dem absteigenden Ast sehen. Schwierig, da jederzeit den Überblick zu 
behalten.

> zZ gibt es ohne hin nur den kleinen Bruder, den 1614, und der reicht mir
> von der PIN-Anzahl her nicht aus. Auf dem Schirm hatte ich den Typen
> auch schon, scheiderte jedoch an der aktuellen Beschaffungslage.

Warum genau müssen es eigentlich zwei ADCs sein?

von Andreas G. (andreas_g498)


Lesenswert?

Halo @c-hater,

Ich habe niemals so ausgesprochen, das ich für diese angedachte 
Anwendung wirklich zwei eigenständige und getrennt laufende ADCs 
benötige.

Die Diskussion wurde wohl wieder nur von einigen angefacht, die zu einem 
noch nicht wussten, dass mit einigen AVRs differenzielle Messungen auf 
der HW Ebene möglich sind, und dann wollte ich nur die offensichtlich 
falsche Behauptung entkräften, dass AVRs nur einen ADC haben, der nur 
via Multiplexing einzelne oder veschiedene ADC Kanäle zur Verfügung 
stellt. Es gibt sogar schon, wenn auch zZ nicht erhältlich, aus der V2 
Serie Chips ( Flaggschiffe ) die sogar über 4 ADCs verfügen, jedoch für 
mich auf Grund der Bauform nicht in Frage kommen. Mir reicht einer, und 
mit dem 261/461 habe ich die geforderte Anzahl, mit zwei Channels 
differenzelle Messsungen durchzuführen.

Aber nun Schluß mit dem Thema, @Andreas B. hat mich auf den richtigen 
Weg gebracht, die Auswahl ist getroffen, der Chip ist bestellt. Und 
damit sollten wir auch zum Abschluss kommen.

Danke nochmal an alle die sich so rege an dieser Diskussion beteiligt 
haben.

Gruß

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
Noch kein Account? Hier anmelden.