Guten Abend, ich möchte mit einem Mikrocontroller (Atmega324A oder 324PA) über den eingebauten AD-Wandler Spannungen im Bereich von 0...5V (4x) und 0...24V (2x) und über einen Shunt Ströme bis 20A (2x) mit einer Tastfrequenz von 1kHz messen. Die Messwerte sollen auf einem HD44780 Display angezeigt und über SPI auf einer SD-Karte abgespeichert werden. Versorgen möchte ich das Ganze über einen USB-Anschluss (stationär am PC) und mit AA-Batterien oder Akkus (Mobil). Die Hauptkomponenten der Schaltung wären: Atmega324A oder 324PA FT232R für Kommunikation über USB HD44780 Display mit Beleuchtung RTC: DS1307 o.Ä. zwei LEDs SD Karte ggf. Pegelwandler für SPI Bus 4 Taster an interne Pullups - Eine Frage zur Wahl 324A oder 324PA: Der 324PA verbraucht etwas weniger Strom als der A. Durch welchen Nachteil erkauft er sich das gegenüber dem 324A? http://www.atmel.com/Images/Atmel-8272-8-bit-AVR-microcontroller-ATmega164A_PA-324A_PA-644A_PA-1284_P_datasheet.pdf Auf Seite 321 sieht man den niedrigeren Verbrauch, in den Diagrammen ab 389 / 415 sehe ich jedoch keinen Unterschied mehr. - Eine Frage zur Migration vom Atmega32 zum Atmega324A: Bisher habe ich mit einem Atmega32 experimentiert und würde jetzt zu einem 324A greifen. Für den Atmega32 habe ich jetzt schon ein Programm geschrieben. Für die Migration zum "324P" habe ich die App Note gefunden: (der 324A sollte ja identisch sein?) http://www.atmel.com/Images/doc8001.pdf Das kritischste was ich gesehen habe ist unter Punkt 4, I/O Mapping and SRAM: "The ATmega164P/324P/644P internal data SRAM addressing starts at 0x100 as opposed to 0x60 in ATmega16/32." Ich programmiere den Mikrocontroller mit dem Atmel Studio 6. Bevor ich das Programm später auf den neuen Controller flashen kann, muss ich im aktuellen Projekt den Controller wechseln. Wird der Adressbereich dann automatisch umgeschrieben oder muss man das irgendwo manuell einstellen? Jetzt zur Kernfrage, der Versorgung: Die Schaltung soll entweder über USB (4,4V...5,5V) oder über 6x AA Batterien oder Akkus (also 7,2V bzw. 9V) betrieben werden. Dabei soll die USB Spannung bevorzugt werden. - Stromverbrauch: Als groben Überschlag würde ich vom folgenden Verbrauch ausgehen: µC: <20mA bei 14,7456 / 16 MHz 2 LEDs: 40mA HD44780 LCD beleuchtet: 20mA SD Karte: 100mA (bei 3,3V) RTC+Pegelwandler+Current Amp: <5mA Wenn ich nichts übersehen / vergessen habe, wären das in Summe 185mA. Kommt das in etwa hin? Wie viel Reserve sollte man da einrechnen? Für die Versorgung der Schaltung hätte ich zwei Ansätze: (Skizze im Anhang) Ansatz 1) Den µC mit 5V betreiben und die SD-Karte mit 3,3V: Die 9V der Batterien gehen auf einen LDO oder Buck, der sie auf 5V runtersetzt. Dazu kommt die ~5V USB Versorgung, die den LDO/Buck über den SHDN Pin abschaltet und sich dann nach einem P-FET als "ideale Diode" mit dem Ausgang des LDO/Buck trifft und den µC versorgt. Dort werden mit einem weiteren LDO 5V -> 3,3V für die SD Karte generiert. Überschlag Verluste im Worst-Case am LDO: Pv1 = (9V-5V)*0,2A = 800mW Pv2 = (5V-3,3V)*0,1A = 170mW Vorteil: höhere Taktfrequenz möglich, Kontrastspannung für Display unproblematisch Nachteil: braucht einen Pegelwandler für den SPI zur SD-Karte (reicht bei einer SD Karte eigentlich ein Unidirektionaler oder muss er bidirektional sein?) Ansatz 2) Die gesamte Schaltung mit 3,3V betreiben: Die 9V gehen mit einem LDO oder Buck auf 3,3V runter. Hier müsste ich mir dann überlegen, wie ich den 9V Pfad mit einem FET öffnen kann, wenn die USB Spannung aktiv ist. Die USB Spannung geht, wie in Ansatz 1, über eine "ideale Diode" ebenfalls an den LDO/Buck. Überschlag Verluste im Worst-Case am LDO: Pv = (9V-3,3V)*0,2A = 1,14W Vorteil: SD Karte kann direkt vom µC angesteuert werden Nachteil: niedrigere Taktfrequenz (max. 12MHz?), mehr Aufwand bei Kontrastspannung am Display (sowas wie ICL7660?) oder die PWM Variante (Ladungspumpe?), ich brauche noch eine Ansteuerung für einen FET als Schalter im 9V Pfad Welche der beiden Varianten würdet ihr als "sinnvoller" erachten? Würdet ihr bei den zu erwartenden Strömen (sofern ich nichts übersehen habe) noch Linearregler nehmen oder direkt einen Buck-Converter? (für die 9V->5V/3,3V) Allgemeine Frage: Nach welchen Kriterien würdet ihr die Taktfrequenz festlegen? Bisher habe ich 14,7456MHz genommen. Für UART super, um auf glatte Interrupts in Zehnerpotenzen (hier 10^-3) zu kommen jedoch nicht ideal, da eine kleine Abweichung bleibt. Wäre super, wenn jemand ein paar meiner Fragen beantworten und ein paar Tips geben könnte. :) Schöne Grüße
Und wofür sind 10^-3 bei einem µC gut? Dadrin funktioniert alles mit Binärzählern, die Zahl 1000 ist dort nicht "rund". 1024 schon eher...
Ein ATmega1284P mit seinen 16 KiB RAM wäre angebrachter, denn eine SDCard kann beim Schreiben durchaus mal bis zu einer halben Sekunde verzögern: 4+2+2 = 8 Kanäle mal 1 oder 2 Bytes bei 1 kHz sind 4 oder 8 kB in 0.5 s, der ATmega328 hat nur 2 KiB. > 2 LEDs: 40mA Dienen diese zu Beleuchtungszwecken? > Nachteil: niedrigere Taktfrequenz Wo steht etwas von der Notwendigkeit eines hohen Taktes? Oder anders gefragt, warum wären z.B. 11.059 MHz (bei 3.3 V) zu langsam? > ...I/O Mapping... Das interessiert eigentlich, wenn überhaupt, nur Assemblerprogrammierer, der C-Compiler erledigt das. Die betreffenden Zugriffe werden einen Tick langsamer, spielt fast nie eine Rolle.
Carol schrieb: > Und wofür sind 10^-3 bei einem µC gut? > > Dadrin funktioniert alles mit Binärzählern, die Zahl 1000 ist > dort nicht "rund". 1024 schon eher... Für die Abtastrate von 1kHz wollte ich jede Millisekunde einen Interrupt auslösen, der dann über ein Flag im Hauptprogramm die Wandlung anstößt. Darum die "10^-3" = 1ms. Wenn ich mich nicht vertan habe bräuchte ich dafür mit Timer1 im CTC Modus ein OCR1A von 14744,6 (nach ocr1a = [ f_cpu / (prescaler * f_interrupt) ] -1 ), was nicht machbar ist. Wobei die Abweichung sehr klein ist, womöglich vernachlässigbar. (ca. -0,0027%/+0,0041%) S. Landolt schrieb: > Ein ATmega1284P mit seinen 16 KiB RAM wäre angebrachter, denn eine > SDCard kann beim Schreiben durchaus mal bis zu einer halben Sekunde > verzögern: 4+2+2 = 8 Kanäle mal 1 oder 2 Bytes bei 1 kHz sind 4 oder 8 > kB in 0.5 s, der ATmega328 hat nur 2 KiB. > An den Zugriff auf die SD-Karte habe ich nicht gedacht. Ich hatte gedacht, dass man einmalig auf die SD-Karte zugreift und "aktiv" hält und dann einfach dauerhaft die Werte draufschreibt, wenn sie gerade kommen. Nach dem was du geschrieben hast vermute ich, dass man die Werte in dem RAM schreibt und dann in Intervallen als Ganzes auf die SD-Karte schreibt? Dafür würde ich mit meinem bisherigern Ansatz dann ziemlich viel RAM brauchen, denn ursprünglich sollten die Telegramme die ich abspreichern wollte so aufgebaut sein: (und so hatte ich sie Testweise per UArt verschickt.)
1 | Sensorname _ dd.mm.yy _ hh:mm:ss.ms _ Wert \n |
2 | 5 1 5 1 8 1 2 1 |
Das wären dann nach meiner Rechnung 24 Byte pro Messwert und Kanal gewesen. Wenn man das zwischenspeichern müsste, würden da ja absurde Datenmengen anfallen. Demnach müsste ich das Telegramm entschlacken, nur am Anfang Datum ect. senden und danach mit einer Laufnummer arbeiten. Kann man auf der SD-Karte problemlos zwischen mehreren Textdateien als Zielort wechseln oder muss man das alles in eine Datei schreiben? >> 2 LEDs: 40mA > Dienen diese zu Beleuchtungszwecken? Die eine LED ist als Status-LED für das Programm und die andere liegt hinter der Versorgung und soll signalisieren, dass das Gerät eingeschaltet ist. Für den Zweck würden die wahrscheinlich auch mit weniger Strom noch ausreichend hell sein. >> Nachteil: niedrigere Taktfrequenz > Wo steht etwas von der Notwendigkeit eines hohen Taktes? Oder anders > gefragt, warum wären z.B. 11.059 MHz (bei 3.3 V) zu langsam? Bei der Taktfrequenz bin ich mir ehrlichgesagt nicht sicher, wie viel ich da brauche, da ich dazu keine Erfahrungswerte habe. Daher auch die Frage, nach welchen Kriterien man die festlegen würde. > >> ...I/O Mapping... > Das interessiert eigentlich, wenn überhaupt, nur Assemblerprogrammierer, > der C-Compiler erledigt das. Die betreffenden Zugriffe werden einen Tick > langsamer, spielt fast nie eine Rolle. Gut, dann sollte das keine Probleme machen. Bin auf das Thema gestoßen und war mir nicht sicher ob das dramatisch wäre. Beitrag "Atmega324A Probleme bei FET Steuerung" Bis hierhin schonmal Danke für die Antworten und noch einen schönen Sonntag.
:
Bearbeitet durch User
> Zugriff auf die SD-Karte ... einfach dauerhaft die Werte draufschreibt Genauso mache ich es, übrigens völlig ohne Dateisystem; trotzdem treten diese Pausen bis 0.5 s auf, ohne Unterschied zwischen no-name und etwas besseren Samsung-SDCards. > in Intervallen als Ganzes auf die SD-Karte Nein, kontinuierlich per FIFO. > problemlos zwischen mehreren Textdateien als Zielort wechseln Ich denke schon, warum nicht, wenn man ein entsprechendes Dateisystem verwendet, z.B. von ElmChan. > LED ist als Status-LED Nur als Beispiel, weil ich sie zuletzt verbaut habe: KM2520ZGC-G01 von Kingbright (schön klein, trotzdem bedrahtet) sind bei direktem Sonneneinfall noch bei 150 uA lesbar.
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.