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ß
https://www.mouser.de/c/semiconductors/embedded-processors-controllers/microcontrollers-mcu/8-bit-microcontrollers-mcu/?core=AVR&m=Microchip&number%20of%20i%2Fos=16%20I%2FO Ich staune gerade: Fast alles auf Lager. Ob ich jetzt von den ARMs wieder auf AVR umsteigen sollte?
:
Bearbeitet durch User
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.
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.
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ß
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.
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.
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ß
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.
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.
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.
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 ;)
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ß
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.