Guten Abend und ein frohes Fest ich möchte gerne mehrere Current-Sense Ausgänge von Smart-Switches überwachen und hätte mir dabei folgende Schaltung überlegt: v | Strom 0..3mA 8 8x -+ | -+ | | +---|>|----+------+--> ADC | | ||--' |1| SEL ->----||<-. |k| ||--| | | | === === Die Schaltung möchte ich 8x aufbauen, die gerade nicht zu messenden Stromquellen möchte ich mit einen FET (Rds-on = 5 Ohm) kurzschließen. Der Strom der zu messenden Stromquelle fließt dann über die Diode und fällt an dem Widerstand ab. Müsste doch vom Prinzip her so funktionieren, oder? Den Mux im AVR kann ich nicht verwenden, da ich nicht genug ADC-Kanäle hab. Gruß Roland
Ich würde eher einen Atmega mit entsprechender Anzahl ADC-Eingänge verwenden. Braucht auch gleich weniger Platz auf der Platine. Das Problem was ich sehe, zumindest wenn ich deinen Aufbau richtig interpretiere, ist einfach die Tatsache dass du die anderen Stromquellen mit kurzschließt... Vielleicht solltest du auch vorher klären, ob die Stromquellen damit klarkommen.
Du solltest aber beachten, dass die Spannung am Drain des jeweiligen FET sich beim Schalten zwischen fast Null und ca. 3,5V ändert. Die Stromquelle muss sich dann jedesmal neu einstellen und schwingt dabei möglicherweise über. Falls es nicht stört, lässt sich auch jeder Leitung ein 1k spendieren und die Signalauswahl kann mit einem 1 zu 8 Analog-MUX 4051 erfolgen.
Also einen Atmel mit mehr ADC-Pins kann ich nicht nehmen, ich hab bereits einen ATMEGA32, der hat 8 Analogeingänge, von denen ich ein paar für andere Zwecke benötige (ich hab noch max. 4 frei) Beim Kurzschließen einer STROMquelle sehe ich kein Problem, es fließt ja deshalb auch nicht mehr Strom. Das mit den überschwingern klingt logisch. Wie problematisch ist es eigentlich, wenn die Messspannung nahe an den Rails vom 4051 gehen. ich hab nur +5V (notfalls ungesiebte +12V) zur Verfügung. Kommt der 4051 damit klar wenn da exakt 0V anliegen. Auf die Schnelle habe ich diesen Beitrag gefunden, welcher von weiteren Problemen berichtet: Beitrag "4051 und AVR Atmega8" Gruß Roland
Oder einen Tiny24 zum Messen einsetzen und seriell (SPI, 1wire, TWI) mit dem Mega32 kommunizieren lassen? Das braucht auch nicht mehr Platz auf der Platine und ist zuverlässig. ~
Die Lösung mit dem Tiny24 hört sich im Moment SEHR interessant an, aber ich werd aus dem DBL nicht schlau... http://www.farnell.com/datasheets/102858.pdf Wie programmiere ich den Chip? Ich muss gestehen ich hab bis jetzt nur mit ATMEGA's <= 32 gearbeitet. Lt. Datenblatt ist das ISP-Interface an Port B angeschlossen, allerdings sind die SPI-Pins an Port A (an welchem auch die Analogports sind) Wenn die ISP-Pins mit den Analogports geshared werden, befürchte ich, dass ich das Teil im eingebauten Zustand nicht programmieren kann... (ist aber ein MUSS!) Evtl kann man den Chip auch über debugWire programmieren. (hab ebenfalls noch nie was damit gemacht) Als Programmiergerät hätte ich ein JTAGICE-mkII zur Verfügung EDIT: Kann ich eigentlich 2 unterschiedliche Chips brennen,wenn diese am gleichen SPI hängen? Gruß Roland
>Wie programmiere ich den Chip? ISP >Lt. Datenblatt ist das ISP-Interface an Port B angeschlossen, allerdings >sind die SPI-Pins an Port A (an welchem auch die Analogports sind) ISP ist an PortA >Wenn die ISP-Pins mit den Analogports geshared werden, befürchte ich, >dass ich das Teil im eingebauten Zustand nicht programmieren kann... Du mußt die Programmierpins auf der Platine direkt mit den ISP-Pins am Controller verbinden. Andere Peripherie muß mit mindestens 2.2kOhm Serienwiderstand abgetrennt werden. RESET darf nicht weggefused sein. Dann kannst Du auch über ISP proggen. >Evtl kann man den Chip auch über debugWire programmieren. Kann man. Muß man aber einen DW-Programmer haben. ISP ist universeller. >Kann ich eigentlich 2 unterschiedliche Chips brennen,wenn diese am >gleichen SPI hängen? Ja. Wenn Du dem jeweils nicht zu proggenden Chip die SCK abklemmst
Der Tiny24 hat 8 ADC-Eingänge an PortA. Es bleiben noch 3 weitere I/O-Pins frei, einer davon ist Int0. Mit Int0 und einem weiteren Portpin lässt sich wunderbar ein SPI-Slave (Schieberegister) realisieren. Der letzte freie Pin kann dann als Enable-Eingang dienen, falls noch mehr Peripherie am SPI hängt. Das Programm im Tiny24 müsste Folgendes tun: - reihum die 8 ADCs einlesen und in RAM-Zellen (Array) ablegen, evtl. mit Glättung (Mittelwertbildung) - wenn Enable aktiv wird, dann Clock-Interrupt freigeben (dabei Int-Flag löschen um ungewollte Auslösung zu unterdrücken), Zeiger auf Beginn des Arrays setzen und erstes Byte in Shift-Register kopieren - wenn Clock-Interrupt, dann per State-machine nächstes Bit aus Shift-Register an Data-Out legen, bei Byte-Ende nächstes Byte aus Array holen - wenn Enable inaktiv wird, dann Clock-Interrupt sperren Wenn Du den Tiny24 in der Schaltung programmieren willst/musst, (wofür ich eigentlich keinen Anlass sehe, der kann fertig programmiert eingebaut werden), dann musst Du halt einen eigenen ISP-Anschluss vorsehen und dafür sorgen, dass die ISP-Leitungen nicht von der Peripherie gestört werden. Der Mega32 (oder größer) muss dann, um an die Daten zu kommen, bei Bedarf (also in regelmäßigen Abständen) Enable aktivieren und als SPI-Master 8 (16) Bytes einlesen und diese in ein Array legen, wo sie dann vom Hauptprogramm in aller Ruhe ausgewertet werden können. Nach dem Transfer ist Enable wieder zu deaktivieren, SPI steht dann für andere Kommunikation mit Peripherie zur Verfügung, falls Bedarf besteht. ~
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.