Hallo, ich stehe vor folgendem Problem: Zur Zeit entwickel ich eine Schaltung für meinen RC-Helikopter die sich hauptsächlich mit dem ansteuern von Positionslichtern beschäftigt. Dies realisiere ich mit einem Attiny13A. Das funktioniert auch soweit. Zusätzlich soll nun aber auch die Spannung am Akku überwacht werden. Dafür möchte ich zuerst Daten sammeln. Das heißt ich möchte gerne die Akku-Spannung über den ADC einlesen und im Attiny speichern. Jede Minute oder alle 2 Minuten soll ein Wert gespeichert werden (Flugzeit 10-15min). Zuhause möchte ich dann über eine Umschaltung vom Positionslicht-Programm sowie der Akkuüberwachung auf eine Diagnose umstellen und die Werte auslesen. Besteht die Möglichkeit die gespeicherten Werte an nur einem Pin seriell auszugeben und z.B. parrallel umzuwandlen um diese auf einem LC-Display anzuzeigen? Im Datenblatt bin ich bisher nicht fündig geworden. Gruß Patrick
machbar, entweder dein Tiny speichert es im EEPROM und wenn der kaputtgeschrieben ist wird der Tiny ersetzt oder du spendierst einen I2C EEPROM optimal DIL fürs einfache wechseln. Patrick N. schrieb: > Besteht die Möglichkeit die gespeicherten Werte an nur einem Pin seriell > auszugeben und z.B. parrallel umzuwandlen um diese auf einem LC-Display > anzuzeigen? ja mit 2 Pins ginge es Tx und GND, aber an einen externen Computer oder Atmel oder Terminal, ein simples LCD hat zu wenig Inteligenz. Das kontinuierlich als LinePrint auszugeben ist möglich aber leseunfreundlich, sollte schon Seitenweise erfolgen und dann muss man auch Seiten umblättern können.
Zum Auslesen (wo speicherst Du die Werte eigentlich?) müsstest Du den SPI-Bus verwenden und über diesen die Daten an einen externen Controller in Deinem "Diagnoseadapter" schicken, der sie dann auf einer entsprechenden Anzeige ausgibt. Da der Attiny13 keine "echte" SPI-Hardware hat, musst Du das SPI-Protokoll in Software nachbilden. Das ist jedoch relativ einfach (auf einem Pin werden die Datenbits ausgegeben, auf einem anderen Pin das Clock-Signal getoggelt, danach das nächsten Datenbit...).
Weshalb nicht einen Controller verwenden nit etwas dran, zB einer seriellen Schnittstelle, zB einem Mega 16 oder Nachfolger ? Dann koennte man's per PC auslesen, was viel einfacher ist wie ein Display.
:
Bearbeitet durch User
Oh D. schrieb: > Weshalb nicht einen Controller verwenden nit etwas dran, zB einer > seriellen Schnittstelle, zB einem Mega 16 oder Nachfolger ? Dann koennte > man's per PC auslesen, was viel einfacher ist wie ein Display. Vermutlich, weil es keinen Mega mit weniger als 20 Pins gibt. Es gibt aber den ATiny102, der ein UART device und ebenfalls nur 8 Pins hat. An eine solche UART kann man dann ohne Probleme einen UART/USB Wandler anschließen und mit Hilfe eines PC Terminal Programms den Output anzeigen.
:
Bearbeitet durch User
Ich habe mir das ganze folgendermaßen vorgestellt: - Der Attiny speichert die Daten im EEPROM - Zuhause wird der Attiny an eine externe Platine angeschlossen. Diese zweite Platine enthält einen Atmega zum ansteuern des LCD. - Über eine Umschaltung möchte ich die gespeicherten Daten übertragen und anzeigen. Joachim B. schrieb: > Das kontinuierlich als LinePrint auszugeben ist möglich aber > leseunfreundlich, sollte schon Seitenweise erfolgen und dann muss man > auch Seiten umblättern können. So habe ich mir das gedacht, dass ich Step-By-Step die Daten anschauen kann. Sollte ich mich entscheiden einen externen EEPROM zu benutzen. Welcher würde seinen Dienst für diese Aufgabe erfüllen. Schließlich soll alles klein und nicht überdimmensioniert sein (Platz sowie Speicherkapazität). Gibt es dort große Unterschiede im Bezug auf die Benutzerfreundlichkeit?
Patrick N. schrieb: > Sollte ich mich entscheiden einen externen EEPROM zu benutzen. Welcher > würde seinen Dienst für diese Aufgabe erfüllen. Schließlich soll alles > klein und nicht überdimmensioniert sein klein Tiny als SMD, aber wenn dessen EEPROM tot ist wer tauscht SMD Steine? I2C EEPROMS gibt es auch als SMD dann wäre beim Tausch wieder löten angesagt, auch doof denn SMD Sockel willst du nicht auflöten weil nicht klein aber teuer! das hier als DIL 8 PDIP geht doch klein und 1Mbyte at24C1024 http://www.atmel.com/Images/doc1471.pdf ich denke 8-Pin DIL sagt dir was? das dürfte selbst gesockelt gefühlt nicht zu groß und schwer sein
Das klingt doch SEHR super. Vor allem ist es für mich als Neuling in
diesem Bereich.
Zum Thema "EEPROM tot"
Ist doch richtig, dass ich mit einer geschätzen Lebensdauer von 3333
Wochen rechnen kann, wenn ich sage ich habe wöchentlich 30 Lese- und
Schreibvorgänge. Oder ist es dementsprechend die Hälfte?
Oder kommt da mehr hinzu?
> ich denke 8-Pin DIL sagt dir was?
Ja, damit kann ich auch noch leben, was den Platz angeht.
Ich werde mir auf jeden Fall ein paar I2C EEPROMs zulegen und damit
etwas basteln.
http://www.whoopsie.de/home/12114920140111 so als Ideenquelle, der Mininlogger vom RC LineForum
:
Bearbeitet durch User
Hi >Ich werde mir auf jeden Fall ein paar I2C EEPROMs zulegen und damit >etwas basteln. Warum nicht gleich FRAM -High Endurance 10 Billion (10^10) Read/Writes MfG Spess
Noch ein Vorschlag, dürfte softwaremäßig das einfachste sein: http://www.ebay.de/itm/RTF-BLACKBOX-FLIGHT-DATA-RECORDER-CLEANFLIGHT-OPENLOG-/141732614081?hash=item20ffec0fc1:g:G2wAAOSwvgdW3VBY Einfach per Software-UART (nur TX nötig) vom Tiny13 deine Messdaten raussenden. Am Ende kannst du die SD-Card rausnhemen und am PC lesen.
Horst M. schrieb: > Joachim B. schrieb: >> das hier als DIL 8 PDIP geht doch klein und 1Mbyte >> >> at24C1024 > > 1 M Bit ! stimmt ich wunderte mich ob der Beschreibung eines Distributors, kannte die auch nur immer als Mbit, mea culpa und dabei habe ich sogar noch ins Datenblatt vor dem Posting geschaut. Ich wundere mich, gibts keine 4- und 8- Mbit I2C in 8 PDIP/DIL
chris schrieb: > Einfach per Software-UART (nur TX nötig) vom Tiny13 deine Messdaten > raussenden. Nicht mal ein extra Leituung ist nötig, wenn die Daten über die Positionslichter ausgegeben werden. Wahlweise elektrisch oder optisch an einer dieser LEDs ankoppeln.
> so als Ideenquelle, der Mininlogger vom RC LineForum Das ist genau das was ich suche bzw. basteln möchte. Sieht gut aus. Auch größen technisch passt das ja gut. > Warum nicht gleich FRAM Kenne die ganzen Unterschiede nicht wirklich. Habe in diesem Gebiet noch keine Erfahrungen gemacht. Möchte mich da aber so langsam aber sicher rein arbeiten. Aber da FRAM angesprochen wurde. Ohne jetzt selber nachgeschlagen zu haben, handelt es sich dabei nicht um einen flüchtigen Speicher (RAM)? Wie gesagt muss mich da in Zukunft mal rein arbeiten.
Es gibt auch SPI-Flash im SO-8 bis 32Mbit. I2C hat für große Speicher eine zu geringe Datenrate. Z.B. der S25FL032P0XMFI011 kann bis 104MHz SPI-Takt.
Peter D. schrieb: > Es gibt auch SPI-Flash im SO-8 bis 32Mbit. > > I2C hat für große Speicher eine zu geringe Datenrate. > Z.B. der S25FL032P0XMFI011 kann bis 104MHz SPI-Takt. Um alle 1 bis 2 Minuten die Akkuspannung aufzuzeichnen ist eine SD-Card mit min. 64 Gbytes vonnöten.
64 GByte? Geht da gerade was an mir vorrüber oder wie? Ich wäre jetzt davon ausgegangen, dass ich in einer Minute 4 Byte pro Wert belege. Also maximal 60 Byte pro Flug (15 Minuten). Reden wir nun aneinander vorbei oder habe ich gerade den Zusammenhang nicht verstanden?
Okay, die Frage zu dem FRAM hat sich bereits erledigt. Habe gerade nachgeschlagen und weiß nun wieso es ein nichtflüchtiger Speicher ist. Die Namesgebung hat mich da in die Irre geführt.
Patrick N. schrieb: > ... > Besteht die Möglichkeit die gespeicherten Werte an nur einem Pin seriell > auszugeben... ...um diese auf einem LC-Display > anzuzeigen? JA. Das ist sogar recht einfach. Verwende eine Software UART. Dabei brauchst Du nur die Sende-Leitung. Die Routine für das Senden eines Bytes könnte so aussehen:
1 | // 104 us entspricht 9600 baud. |
2 | // Das Umschalten der Pins braucht auch seine Zeit. Deshalb nur 98. |
3 | // Muss experimentell ermittelt werden. |
4 | |
5 | #define UART_DELAY 98 // UART Impulslänge |
6 | #define PIN_UART (1<<PINB0) |
7 | |
8 | void SendChar(uint8_t c){ |
9 | uint8_t SetByte[10]; |
10 | uint8_t PinSave; |
11 | uint8_t n = 0; |
12 | |
13 | cli(); |
14 | PinSave = PORTB; |
15 | SetByte[0] = PinSave |= PIN_UART; |
16 | for (n = 1; n <= 8; n++) |
17 | { |
18 | if ((c & 1) == 0) SetByte[n] = (PinSave |= PIN_UART); else SetByte[n] = (PinSave &= ~PIN_UART); |
19 | c>>=1; |
20 | } |
21 | |
22 | SetByte[9] = PinSave &= ~PIN_UART; |
23 | for (n=0; n <= 9; n++) |
24 | { |
25 | PORTB = SetByte[n]; |
26 | _delay_us(UART_DELAY); |
27 | } |
28 | |
29 | sei(); |
30 | } |
Das ganze über einen Timer zu machen ist sicher besser, aber auch aufwendiger. Das Beispiel sollte aber den Anforderungen genügen. Das Programm ist nur als Beispiel und Anregung gedacht. Es besteht die Gefahr, dass das Programm zu groß wird. Dann ist zu überlegen ob ein ATtiny85 eine Alternative darstellt. Der ist Pinkompatibel, nicht wirklich teurer und hat deutlich mehr Speicher (auch EEPROM). P.S.: Bei einem 10-Bit ADC sollten zwei Bytes pro Spannungswert genügen.
Uwe K. schrieb: > Dann ist zu überlegen ob ein ATtiny85 eine Alternative darstellt. Der > ist Pinkompatibel, nicht wirklich teurer und hat deutlich mehr Speicher > (auch EEPROM). ist doch egal ob man einen Tiny kaputt schreibt und den wechselt und neu flashen muss oder ein I2C EEPROM nur sollten beide DIL8 sein für den leichten Wechsel, ich würde lieber I2C EEPROM wechslen als immer wieder Tinys zu flashen, kommt halt auf die Schreibraten an.
Wenn er 60 Byte pro Flug schreibt, überlebt das EEPROM uns alle! Also keine Panikmache wg. der Lebensdauer, das ist nämlich Unsinn.
Stimmt meine Rechnung denn ? Oder liege ich komplett daneben? Es sollen ja maximal jede Minute der Wert der Spannungsmessung abgelegt werden bei ca. 15 Minuten Flugzeit.
Nee, passt schon. Und wenn du bei jedem Flug das ganze EEPROM einmal vollschreibst, hält das Ding min. 100000 Flüge. Das reicht. (Lesen vom EEPROM ist verschleißfrei.)
Wunderbar. Kommende Woche geht es dann los, dann werden meine Platinen fertig. Danke erstenmal.
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.