Hallo Ich möchte ein 1z lipo Akku überwachen und würde gerne den attiny 84/85 nehmen. Da die adc ja nur eine ref Spannung messen können kann ich den 85 ja nicht so an den Akku hängen die Referenz wäre dann immer null was ja klar ist. Da kam ich auf die Idee ein 3,3 Volt Regler zunutzen geht das so ? Und kann ich die Formel zum umrechnen der Spannung von 4,9 volt nehmen oder muss diese dann auf 3,3 Volt angepasst werden ? Die Eingänge sind ja 5 Volt Tolerant also sollte es gehen. Sorgen macht mir eher das ich schon erlebt habe das sich ein ein atmega48 den strom zum laufen über seriell Port geholt hat weil ich vcc vergessen hatte und damit sogar sauber lief. Vielen dank.
Das geht so nicht die ADC Eingänge können nicht über VCC messen. Bau einen Spannungsteiler ein, sodass ein voller Akku knapp unter VRef liegt. Den 3,3V Regler kannst du weg lassen, spart Strom. Es geht auch ganz ohne Spannungsteiler, wenn du die Referenzspannung andersrum verwendest. D.h. VCC als VRef und dann die Referenz gegen die Betriebsspannung messen.
DAVID -. schrieb: > Da die adc ja nur eine ref Spannung messen können kann ich den 85 ja > nicht so an den Akku hängen die Referenz wäre dann immer null was ja > klar ist. Nö, da hast Du was falsch verstanden. DAVID -. schrieb: > Da kam ich auf die Idee ein 3,3 Volt Regler zunutzen geht das so ? Du brauchst dann einen Spannungsregler mit einer sehr kleinen Spannungsdifferenz zwischen Ein- und Ausgang (Low Dropout) und Du kannst die Akkus nie benutzen bis sie wirklich leer sind (ok, sollte man auch nicht). DAVID -. schrieb: > Die Eingänge sind ja 5 Volt Tolerant also sollte es gehen. Nein, sind sie nicht. Die Eingänge können Vcc+0,5V ab, also in Deinem Fall 3,8Volt. Was Du suchst, ist ein Spannungteiler. Dann nimmst Du die 1,1V oder 2,56V der internen Referenz und sparst Dir den Spannungsregler.
Und der Spannungsteiler sollte noch nen Pufferkondensator bekommen weil die ADC Messung sonst zu ungenau wird.
Hmm ok nur (hoffe habe das richtig verstanden) hat der attiny85 mit sein 8 pins keinen ref pin, also MUSS ich den ic ja auf eine feste Spannung legen um die Abweichung zu messen oder messen diese adc unabhängig von der vcc ?
Lies mal das Datenblatt Kapitel zum ADC, der kann deutlich mehr als du denkst! Eine feste Versorgung ist nicht nötig, bzw. müsste die ja so stabil und sauber sein wie eine Referenzspannung, das ist nicht sinnvoll machbar. Nutze einfach die interne Referenzquelle.
Ok gleich 2 zugaben meiner seits. Zum ersten hat der attiny 85 sehr woll ein Referenz pin (den habe ich aber schon belegen müssen daher nicht gesehen) Zum 2ten verstehe ich die Funktion des refpins auch nach dem lesen der Lektüren und gucken einiger Videos immer noch nicht. Und Bin jetzt aber zu einer Lösung gekommen, wenn ich das angleichen der Spannung nicht hin bekomme. Muss ich eben VCC auf 7,5 Volt anheben (step up) und dann auf 5 Volt regeln (7805) und damit den 85 betreiben dann kann dieser von 4,2 bis 3,60 sauber messen.
Antwort: Diese geringfügige Transferleistung musst du schon erbringen, ob du deinem uC auch eine Versorgungsspannung gönnst oder ob er ohne läuft.
DAVID -. schrieb: > Zum ersten hat der attiny 85 sehr woll ein Referenz pin Den brauchst du doch gar nicht. Lies mal Kapitel 17.2 (ADC Overview): > Internal reference voltages of nominally 1.1V / 2.56V are > provided on-chip. Du brauchst also gar keinen Referenz Pin, sondern lediglich eine der internen Referenzspannungen und einen Spannungsteiler für das zu messende Objekt. Mit z.B. 2,56V Referenz und einem 1:2 Spannungsteiler könntest du bis etwa 5,12V messen. Dazu braucht der Tiny auch keinen Spannungsregler oder so.
:
Bearbeitet durch User
Nimm die Schaltung von Toxic, evtl. mit anderen Widerstandswerten. Zusätzlich: 100nF Glättung am Spannungsteiler Ausgang, statt 100u lieber 4,7/10u + 100n am Controller. Welche LEDs hast du gewählt? Wenn die nur mit ein paar mA laufen kannst du sie direkt am Tiny anschließen. Vorwiderstände nicht vergessen.
DAVID -. schrieb: > hmm ok vielen dank FRAGE fehlt da nicht VCC ? Die VCC ist die Betriebsspannung des uCs - also die Batteriespannung.Und es ist auch diese Spannung die du messen moechtest.Um diese Messung durchfuehren zu koennen,brauchst du eine Referenz und wenn es auf hohe Genauigkeit nicht ankommt,bietet sich die Interne an:Vorteil ist offensichtlich:Es wird kein externer Pin benoetigt und man spart sich einige Bauteile.... Ich habe das Spannugsteilerverhaeltnis so ausgelegt,dass bei 4.2V(maximale VCC)die Spannung auf ca. 2.56V heruntergeteilt wird.Benutzt du die interne 2.56V-Referenzquelle,wird nach der A/D-wandlung ein Wert von 1023 ausgegeben und entsprechend geringere Werte ,wenn die VCC abfaellt... Löter schrieb: > Nimm die Schaltung von Toxic, evtl. mit anderen Widerstandswerten. Bei den PICs weiss ich,dass der Innenwiderstand der zu messenden Spannungsquelle nicht 10K ueberschreiten soll.Mit den gewaehlten Widerstaenden kommt man auf ca.4k. Aber du hast recht: man kann durchaus etwas hoehere Widerstaendswerte waehlen. ============== Soweit ich aus dem Datenblatt entnehmen konnte,ist die interne Referenz nicht ganz so flexibel ausgelegt wie die bei den PIcs.Mit entsprechender Konfiguration,kann man dort sogar auf den aeusseren Spannungsteiler verzichten....
Mess doch einfach die Bandgap, dann brauchts überhaupt keinen Spannungsteiler und keine externen Pins.
Bernd K. schrieb: > Mess doch einfach die Bandgap, dann brauchts überhaupt keinen > Spannungsteiler und keine externen Pins. Mit dieser Aussage wird der TO nichts anfangen koennen,da er nach eigener Angabe ein generelles Verstaendnisproblem mit VCC/Referenz etc hat. Das beste ist,wenn du ihm/uns eine brauchbare Skizze deines Vorschlages praesentierst.
mal andere frage zwischen rein wenn der gesamte strom 6 mA über den 10 kohm widerstand fliesen soll würde dann nicht die Spannung stark schwanken wenn ich nur eine LED oder 2 leds ansteuer? Den die bc547 brauchen doch zum durch schalten um ein 1mA /0,8 volt und dann würde sich doch die Spannung ändern und der 85 nur noch müll messen oder ? Danke euch für eure tipps.
DAVID -. schrieb: > mal andere frage zwischen rein wenn der gesamte strom 6 mA über den 10 > kohm widerstand fliesen soll Diese Frage macht mich etwas "stutzig".Wieviel Erfahrung hast du mit uCs/Transistoren etc und deren Funktion? Die Basisstroeme liefert der uC direkt ueber seinen VCC-Pin und den Pins die du als Ausgaenge programmiert hast - das hat mit dem 10k-Widerstand ueberhaupt nichts zu tun,da dieser nur als "Sensor" fuer die Batteriespannung dient.
Toxic schrieb: > Diese Frage macht mich etwas "stutzig".Wieviel Erfahrung hast du mit > uCs/Transistoren etc und deren Funktion? Offenbar Null bis -1000.000. Ich kritzele Deinen Vorschlag mal weiter. David: In Hellblau die Versorgungsspannung, klarer? Wenn Deine LEDs nur ein paar wenige mA brauchen, geht das ohne Transistor - dazu habe ich LED Q4 umgemalt.
ja so ergibt das einen sinn ich habe überlegt wie der ic seinen strom ohne vcc aufrecht erhalten soll. Den bei Beitrag "Re: Akku Überwachung so machbar ?" Ist KEIN vcc angegeben und auf rückfragen habe ich das so verstanden als würde der nicht benötig was ich aber nicht so recht glauben konnte. Ich habe nicht viel Erfahrung mit ic ich lerne bei jeden Projekt ein bissel mehr. Und nein die lEDs kann ich leider nicht direkt verbinden. Q1 = 40mA Q2 = 40mA Q3 = 40mA Q4 = 1,5A / (mosfet) Und vielen lieben dank für die Zeichnung ich werde es mal testen. Muss ich da jetzt so vorgehen : int sensorValue = analogRead(0); float voltage = sensorValue * (2.56 / 1024.0); Oder weil ich ja einen 4,2 volt akku habe so; int sensorValue = analogRead(0); float voltage = sensorValue * (4.2 / 1024.0);
Toxic schrieb: > Bernd K. schrieb: >> Mess doch einfach die Bandgap, dann brauchts überhaupt keinen >> Spannungsteiler und keine externen Pins. > > Das beste ist,wenn du ihm/uns eine brauchbare Skizze deines Vorschlages > praesentierst. Na wie in der ersten Antwort schon beschrieben: * den ADC so einstellen daß er Vcc als Referenz benutzt * den Kanal 12 auswählen (Bandgap) und diesen messen. (Im Tiny 85 Datenblatt ist es 12, was Arduino für Nummern hat, k.A.) Also: die zu messende Größe ist konstant (Bandgap) aber das Maß mit dem er sie mißt (Vcc) schwankt und ist die eigentlich interessierende Größe, so kann man ebenfalls auf Vcc schließen, bei der Wandlung wird ein ein Wert herauskommen der umgekehrt proportional zu Vcc ist. Wenn ich wissen will ob die Bierkrüge zu viel Schaum enthalten kann ich entweder das Volumen direkt messen (umständlich und sieht blöd aus) oder ich mache es genau umgekehrt und zähle die gezapften Biere bis das Faß leer ist, ich messe also die bekannte konstante Größe (50l Faß) mit dem unbekannten Maß (Bierkrug), je kleiner die Krüge desto größer die Anzahl, so kann ich ebenfalls auf auf das Volumen schließen bis aufs Komma genau und brauche kein extra Werkzeug (kein externer Pin). Mission erfüllt.
:
Bearbeitet durch User
DAVID -. schrieb: > Den bei Beitrag "Re: Akku Überwachung so machbar ?" > Ist KEIN vcc angegeben und auf rückfragen habe ich das so verstanden als > würde der nicht benötig was ich aber nicht so recht glauben konnte. Erstmal "danke Toxic", dass er das für Dich überhaupt umgezeichnet hat! Sein Text "Im Prinzip" ist eindeutig, das Vorhandensein einer Betriebsspannung an Integrierten Schaltkreisen wird hier als Grundlagenwissen der ersten Stunde vorausgesetzt. > Ich habe nicht viel Erfahrung mit ic ich lerne bei jeden Projekt ein > bissel mehr. Du hast Handlungsbedarf, erstmal Grundlagen zu lesen - es gibt im Umfeld Arduino per Internet jede Menge Schulscripte zu finden, die genau solche Basisdinge klar machen. > Und nein die lEDs kann ich leider nicht direkt verbinden. > Q1 = 40mA > Q2 = 40mA > Q3 = 40mA > Q4 = 1,5A / (mosfet) Was für LEDs? Du hast im Mittel 3,6 Volt, nach oben 4,2V und zum Ende 3,3V Betriebsspannung. Da wird sich der LED-Strom deutlich über die Akkuentladung verringern. > Muss ich da jetzt so vorgehen : > Oder weil ich ja einen 4,2 volt akku habe so; > > int sensorValue = analogRead(0); > float voltage = sensorValue * (4.2 / 1024.0); Ja, durch den Teiler wird Vollauschlag (1023) bei 4,2V erwartet. Das muss noch justiert werden, Deine 2,56V könnnen eine Abweichung haben und auch die Widerstände haben ihre Toleranz. Die Widerstände sind falsch herum, den 10k und den 6k8 gegeneinander tauschen! Mit einen zusätzlichen Trimmpoti könnte man es justierbar machen.
Bernd K. schrieb: > * den ADC so einstellen daß er Vcc als Referenz benutzt > * den Kanal 12 auswählen (Bandgap) und diesen messen. Das erspart zwar den Widerstandsteiler, aber verschenkt unnötig Auflösung. Ich würde es so nicht machen!
Bernd K. schrieb: > Na wie in der ersten Antwort schon beschrieben: > > * den ADC so einstellen daß er Vcc als Referenz benutzt > * den Kanal 12 auswählen (Bandgap) und diesen messen. > (Im Tiny 85 Datenblatt ist es 12, was Arduino für Nummern hat, k.A.) So mache ich dies mit meinen Pics - mit AVR habe ich nichts am Hut.Aber ein kurzer Blick ins Datenblatt des von mir (gestern)downgeloadeten ATiny oder ATmaxilein - weiss der Geier wie man auf solche Namen kommt - hat mir keinen Hinweis darauf gegeben,dass man die Referenz so verschalten kann. Die Vorteile liegen klar auf der Hand,sind aber fuer Anfaenger etwas komplizierter zu verstehen.
Toxic schrieb: > hat mir keinen Hinweis darauf gegeben,dass man die Referenz so > verschalten kann. Doch, schau mal in der Tabelle für ADMUX, MUX[3:0] (Tabelle 17-4 im ATiny85 Datenblatt)
Manfred schrieb: > Das erspart zwar den Widerstandsteiler, aber verschenkt unnötig > Auflösung. Um einen simplen Zustand wie Unterspannung oder "Akku leer" zu erkennen ist das noch mehr als genug Auflösung. Was willst Du da mit 10 Bit Auflösung?
:
Bearbeitet durch User
Bernd K. schrieb: > Toxic schrieb: >> hat mir keinen Hinweis darauf gegeben,dass man die Referenz so >> verschalten kann. > > Doch, schau mal in der Tabelle für ADMUX, MUX[3:0] > (Tabelle 17-4 im ATiny85 Datenblatt) Ja,dann muss ich das nochmal downloaden,sofern du dir im Gegenzug Microchips AN-Note antust?. Es ist eine Ergaenzung zu deinem Bierkrugvergleich. https://www.google.ie/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjo6-b8rvfSAhWIAcAKHct2BfAQFggbMAA&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FAppNotes%2F01072A.pdf&usg=AFQjCNEm6imq69_7Mg4jnVlHrZpyS9_OWw =========================== Unabhaengig davon stellt sich nun die Frage wie man @David weiterhilft. Als Vorschlag bietet sich an ihn erstmal mit der Spannungsteilergeschichte werkeln zu lassen.Wenn dies dann funktioniert kann er ja die 2.Loesung angehen.Genauigkeit spielt eh keine Rolle. DAVID -. schrieb: > int sensorValue = analogRead(0); > float voltage = sensorValue * (2.56 / 1024.0); > > Oder weil ich ja einen 4,2 volt akku habe so; > > int sensorValue = analogRead(0); > float voltage = sensorValue * (4.2 / 1024.0); Wenn du den Spannungsteiler mit dem 10k und 6k8 verwendest muesste die Grundgleichung folgendermassen lauten: ADvalue/(Ubat/1.64) = 1023/2.56 => ADvalue = (1023/2.56)*(Ubat/1.64) => ADvalue = 400 *(Ubat/1.64) Setzt man fuer Ubat verschiedene Werte ein,erhaelt man entsprechende ADvalues Der Wert 1.64 ergibt sich aus dem Spannungsteilerverhaeltnis,bzw dem Spannungsverhaeltnis von 4.2V/2.56V (= 1.64) Der 6k8 muesste korrekterweise etwa 6k betragen - dies ist aber kein Standardwert - gerechnet habe ich mit 6k...... Die Diagramme im Anhang zeigen dir ADvalues fuer verschiedene Batteriespannungen.
Der Vorschlag von Bernd K. ist optimal für den gewünschten Zweck, weil er mit den wenigsten Bauteilen ausreichend Auflösung (0,05 V) bietet. Bei V_BG = 1,1 V: 4,2 V ergibt 268 4,0 V ergibt 281 3,8 V ergibt 296 3,6 V ergibt 313 Aber egal: Die internen Referenzen (2,56 V, oder 1,1 V) haben eine Toleranz von +/-9%! Sonst käme noch ein (hier überflüssiger) Spannungsteiler dazu. Es geht also nicht ohne Abgleich!
danke euch 3 ja ich teste erst mal mit Widerständen solle was unklar sein melde ich mich zeitnah :-) Und so genau muss es nicht sein sinn und zeck des Chips soll es sein die Spannung in 0,100v schritten zumessen und zu verfolgen. 4 LEDs = 6 Abstufungen > 4,18 Volt Blicken alle LEDs ( Zeichen das Akku lade Chip mist baut) <4,00 LED 1 aus <3,90 LED 2 aus <3,80 LED 3 aus <3,70 LED 4 aus / LED 2 an <3,60 LED 2 Blickt. Und noch bissel was anderes was aber keine Spannungsmessung braucht.
:
Bearbeitet durch User
Toxic schrieb: > Unabhaengig davon stellt sich nun die Frage wie man @David weiterhilft. > Als Vorschlag bietet sich an ihn erstmal mit der > Spannungsteilergeschichte werkeln zu lassen. Sehe ich auf jeden Fall so. > Der Wert 1.64 ergibt sich aus dem Spannungsteilerverhaeltnis,bzw dem > Spannungsverhaeltnis von 4.2V/2.56V (= 1.64) > Der 6k8 muesste korrekterweise etwa 6k betragen - dies ist aber kein > Standardwert - gerechnet habe ich mit 6k...... Wer von uns Beiden hat denn da ein Problem mit dem Rechnen? Erstmal hast' die Beiden gegeneinander verdreht, der 6k8 muß in Reihe und der 10k nach GND! Wenn ich rechne: 4,2/(10+6,8)*10 komme ich auf 2,5 Volt. 6k würde exact passen, wenn Vollausschlag bei 4,1V sein soll.
Manfred schrieb: > Wer von uns Beiden hat denn da ein Problem mit dem Rechnen? Ups - jo da ist mir ein (leicht korrigierbarer)Rechenfehler unterlaufen.Aber was hat das mit dir zu tun? Ich habe mich meist auf meine eigene Postings bezogen - kann mich nicht erinnern etwas negatives ueber dich ausgesagt zu haben....
Toxic schrieb: > Ups - jo da ist mir ein (leicht korrigierbarer)Rechenfehler > unterlaufen. Danke! > Aber was hat das mit dir zu tun? Ich habe mich meist auf > meine eigene Postings bezogen - kann mich nicht erinnern etwas > negatives ueber dich ausgesagt zu haben.... Ich kann mich nicht erinnern, etwas derartiges vernommen zu haben. Aus welcher meiner Formulierungen entnimmst Du das? Welchen Grund hätten wir, uns anzumeckern - ich sehe keinen!
So habe jetzt die Platine fertig gebaut und die Software dafür auch FAST. Wie man die Spannung normal über ein adc Pin ausliest weist ich in etwa aber wie geht das bei ein nicht adc Pin ? analogReference(EXTERNAL); Pause int sensorValue = analogRead(PB0); float voltage = sensorValue * (4.18 / 1023.0); PB0 Refef PB1 LED1 PB2 LED2 PB3 LED3 PB4 LED4 PB5 / Reset (freigelassen) Die arduino IDE gibt mir keine Fehler zurück also richtig ? DANKE euch Und mit 10k + 6,2Kohm bei 4,15v habe ich genau 2,564 Volt ist das genau genug oder müssen die 0,004 Volt noch weg ? DANKE
So aufgebaut auf der Platine und mit 4,15 Volt Akku gemessen habe ich an Referenz Pin genaue 2,560 Volt na super! Wenn mir noch jemand sagen könnte wie ich über den Referenz Pin die Spannung noch messe wäre ich am ziel.
So habe es noch mal überarbeitet und gesehen das ich den Reset Pin als ADC Pin miss brauchen kann. Aber leider stimmt was mit der Messung nicht er geht IMMER von einen leeren Akku aus. Ich habe die Software mal aufs nötigste runter gebrochen aber das ändert nix. Zuerst das Setup Da werden >alle< LEDS eingeschalten (kleines Lichtspiel)/(läuft auch) und dann 6 sek warten, Dann Reset Pin als Input deklarieren und normal messen mit: int sensorValue1 = analogRead(5); float voltage1 = sensorValue1 * (4.20 / 1023.0); Und mit if ( voltage1 <= 3.60) // Unterspannung { digitalWrite(2, LOW); digitalWrite(1, LOW); digitalWrite(3, LOW); digitalWrite(4, HIGH); delay(15000); return; } noch Auswerten Wo mache ich den Fehler ?Habe ich was überlesen oder vergessen ?
Code Zitat: " int sensorValue1 = analogRead(5); float voltage1 = sensorValue1 * (4.20 / 1023.0); " sensorValue1 wird als int deklariert. In der zweiten Zeile rechnechst Du aber mit float, daher solltest Du in der zweiten Zeile "sensorValue1" casten. -> float voltage1 = (float)sensorValue1 * (4.20 / 1023.0); Oder Deine Berechnungen kommplett auf Integer (Ganzahlen) umschreien (meist von der Porformance auf kleinen 8-Bittern schneller und weniger Code)...
Zudem Klammerung in der zweiten Zeile ändern: Erst Multiplizieren, dann dividieren float voltage1 = ((float)sensorValue1 * 4.20) / 1023.0;
DAVID -. schrieb: > So habe es noch mal überarbeitet und gesehen das ich den Reset Pin als > ADC Pin miss brauchen kann. Die Schaltung ist grober Unfug, da hilft auch keine Software gegen! Der Spannungsteiler 10k - 6k2 an 4,15V gibt keinesfalls 2,56V, das kann man rechnen. Befasse Dich mit Grundlagen! Wenn an dem Anschluss 2,56V liegen, kommen die aus dem Tiny raus und arbeiten gegen Deinen Spannungsteiler. An den AREF kann man eine externe Referenzspannung legen, wenn der Controller entsprechend programmiert wird. Das Signal vom Deinem Spannungsteiler hat dort nichts zu suchen. Programmiere den Tiny auf interne Referenz 2,56V und lasse den AREF unbeschaltet bzw. 100nF nach GND. Der PB5 wird als Analog-Input ADC0 deklariert. Der Ausgang des Spannungsteilers kommt an diesen Pin. R2 wird 6,8kOhm, R1 wird 10kOhm.
Ok danke atzem werde ich mal testen. Und Manfred die Widerstände habe ich nur beim plan vertauscht sorry. Und Manfred du verwirrst mich wieso den pin wieder jetzt doch wieder wo anderes hin ? ich will die Akku Spannung messen und nicht die ref Spannung ??
Schau doch mal bei Kondensatorschaden auf Youtube vorbei. Er hat so einen Batteriewächter gebaut (zumindest für 12V)
DAVID -. schrieb: > Und Manfred du verwirrst mich wieso den pin wieder jetzt doch wieder wo > anderes hin ? Gebe Dir etwas mehr Mühe beim Schreiben! In dem Entwurf "Lalala-Solala.png" vor einigen Tagen ist der AREF unbeschaltet, warum musst Du das nun wieder ändern? Grob_vereinfacht erfolgt eine digitale Spannungsnessung durch den Vergleich zweier Spannungen. Eine dieser muß genau bekannt und stabil sein, das ist die Referenzspannung. Unter "AD-Wandler" oder "Dual-Slope-Verfahren" findet Google detaillierte Erklärungen dazu. Der Atmel kann als Referenzspannung die Betriebsspannung verwenden, kann sie intern selbst erzeugen oder mit einer externen Referenzspannung versorgt werden. In Deinem Falle wurde geraten, die interne "BandGap" einzuschalten, damit hat er seine 2,56V. Beim ATMega kann man diese am AREF-Anschluß messen. Beim Tiny (ich benutze ihn nicht) dürfte es von dessen Programmierung abhängen, ob diese am AREF erscheint oder der Pin für etwas anderes verwendet werden soll. Wie gesagt, lasse den Anschluß offen oder, wenn Du ihn einschaltest, lege 0,1µF gegen GND dran. In Deinem Entwurf würde die Referenzspannung mit abnehmender Batteriespannung ebenfalls geringer werden - das gibt kein verwertbares Ergebnis. Deine Meßgröße (vom Spannungsteiler) kommt an einen Eingang, den Du natürlich als ADC0, also Analogeingang, programmierst. Liegen nun am ADC0 2,56V an, wird der Vergeich gegen die interne Referenz von 2,56V einen Wert von 1023 ergeben. Liegen am ADC0 1,25V, sollte der Wert 500 sein. Wie schon zuvor gesagt wurde, sind diese 1023 / 500 theoretische Idealwerte, in Deinem Aufbau können die um einige Prozent abweichen. Das nennt man "Bauteiletoleranzen", musst Du für jeden Aufbau individuell nachmessen und justieren. Für diesen Zweck hatte ich vorgeschlagen, zuätzlich ein Trimmpoti zu setzen. Trimmpoti muss nicht, man kann auch die digitalen Zahlenwerte anpassen.
Ok nach dem umlöten musste ich zumein bedauern feststellen das die arduino IDE den Reset Pin nicht setzten kann/will und der IMMER auf vcc bleibt egal was ich anstelle. Also musste ich umplanen (schon wieder). Pin 0 1 3 4 Sind meine Ausgänge jetzt und messen tute ich nach dem Spannungsteiler mit Pin 2: float sensorValue1 = analogRead(2); float voltage1 = sensorValue1 * (2.56 / 1023.0); Jetzt mist er aber gar nix jeden falls ist vcc total egal er reagiert auf KEINE Spannungsänderung von voll (4,2 bis total leer 3,1v) Die Spannungen sind am Pin 2 gemessen. 2.23 = 3,60 2.28 = 3,70 2.35 = 3,80 2.41 = 3,90 2.56 = 4,15 Volt Da alle Ausgänge geschaltet werden muss die vom attiny85 gemessene Spannung immer im bereich von 2.40-2,56 Volt liegen was aber nicht sein kann. Auf was habe ich mich hier eingelassen :-( hätte ich gleich ein größeres Gehäuse gekauft (wooh 70 Cent gespart) und einfach ein step up verbaut wäre ich schon lange fertig mit dem mist .....
DAVID -. schrieb: > Ok nach dem umlöten musste ich zumein bedauern feststellen das die > arduino IDE den Reset Pin nicht setzten kann/will und der IMMER auf vcc > bleibt egal was ich anstelle. Wie kommen jetzt Arduino-IDE und ATTiny zusammen? > Pin 0 1 3 4 Sind meine Ausgänge jetzt und messen tute ich nach dem Tuuut tuut :-) > Spannungsteiler mit Pin 2: > float sensorValue1 = analogRead(2); > float voltage1 = sensorValue1 * (2.56 / 1023.0); Was ist PIN2? Im 8pol-DIP ist Pin2 der ADC3 - wenn passend deklariert. > Jetzt mist er aber gar nix jeden falls ist vcc total egal er reagiert > auf KEINE Spannungsänderung von voll (4,2 bis total leer 3,1v) Genau das ist es - Mist. > Die Spannungen sind am Pin 2 gemessen. > 2.23 = 3,60 > 2.28 = 3,70 > 2.35 = 3,80 > 2.41 = 3,90 > 2.56 = 4,15 Volt Die Wertereihe passt doch fuer 6k2 - 10k sauber hin. > Auf was habe ich mich hier eingelassen :-( Das frage ich mich auch. So ein Gebilde hätte ich mit einem Arduino ProMini an einem Abend gemacht! Für Dich ist es zwei Nummern zu groß, weil Dir jegliche Grundlagen zu fehlen scheinen. Ich habe leider den Eindruck, dass Du in dieser Richtung nichts unternehmen möchtest. Weihnachten ist leider vorbei - da wären ein Arduino-Baukasten mit dem UNO, eine Tüte Bauelemente und das Arduino-Kochbuch ein sinnvoller Wunsch gewesen. Dann ist erstmal ein paar Wochen Spielen angesagt, um die Basis für ein reales Projekt zu setzen.
Ich nehme zum beschreiben meiner Chips ausschließlich die arduino ide. ich habe aber auch normale GEKAUFTE arduinos wie nanos und mega. Beschreiben mache ich mit ein 4€ usb teil. Die Pin Nummer ist bei arduino anderes da ist PB2 Pin 2 am Chip aber selber aber pin 7 also ADC1 habe auch erst gebraucht bis ich das verstanden habe. Und ein fertigen arduino wollte ich wegen der Größe nicht nehmen und mit dem bissel Code was ich auch noch auf den attiny 45 mit nur 4 Kb speicher packen könnte (habe ich aber grade kein da) wäre der mir auch zu schade. Ich versuche es heute Abend noch mal. Aber du hast recht ich mache es wieder schwerer wie es ist. Ich weiß der Akku hat bei der gemessen last von 1,51A eine Laufzeit von genau 125 Minuten bis 3,60 Volt erreicht sind so muss ich nur vorher wieder aufladen und gut ging das letzte Jahr auch ohne irgendeine Überwachung. Ich danke euch für euere Hilfe habe immer hin wieder was gelernt.
So nach fast 2 Wochen ein neuer versuch. Ich habe die Schaltung jetzt mal so um gebaut (siehe plan) und die Firmware so (siehe unten) angepasst aber es erfolgt keinem Messung oder keine Auswertung. Kann doch nicht so schwer sein. Ich habe die verkabelung x mal getestet die ist ok auch ein anderer 85 attiny Chip macht das selbe = nix) void setup() { pinMode(0, OUTPUT);//L pinMode(1, OUTPUT);//S pinMode(2, INPUT); // Messung pinMode(3, OUTPUT); //R pinMode(4, OUTPUT); //L digitalWrite(0, HIGH);//L digitalWrite(1, LOW); //S digitalWrite(3, LOW); //R digitalWrite(4, HIGH); //L delay(2000); digitalWrite(0, HIGH);//L digitalWrite(1, LOW); //S digitalWrite(3, HIGH); //R digitalWrite(4, HIGH); //L delay(2000); digitalWrite(0, HIGH);//L digitalWrite(1, HIGH); //S digitalWrite(3, HIGH); //R digitalWrite(4, HIGH); //L } Soweit kommt er noch dann gibt es keine Änderungen mehr. void loop() { int sensorValue = analogRead(2); float voltage = sensorValue * (5.00 / 1023.0); if ( voltage < 2.23) // Unterspannung 3,60 { digitalWrite(0, LOW); //L digitalWrite(1, LOW); //S digitalWrite(3, LOW); //R digitalWrite(4, HIGH);//L delay(10000); } else if ( voltage < 2.28)// Unterspannung 3,70 { digitalWrite(0, HIGH); //L digitalWrite(3, LOW); //R digitalWrite(1, LOW); //S digitalWrite(4, LOW);//L delay(10000); } else if ( voltage < 2.35)// Unterspannung 3,80 { digitalWrite(0, HIGH); //L digitalWrite(1, LOW); //S digitalWrite(3, HIGH);//R digitalWrite(4, LOW);//L delay(10000); } else if ( voltage < 2.41)// Normalspannung (3,90 { digitalWrite(0, HIGH); //L digitalWrite(1, LOW); //S digitalWrite(3, HIGH); //R digitalWrite(4, HIGH); //L delay(10000); } else if ( voltage > 2.41)// (3,90 { digitalWrite(0, HIGH); //L digitalWrite(1, HIGH); //S digitalWrite(3, HIGH); //R digitalWrite(4, HIGH); //L } delay(8000); } Das einzigste was mir noch einfehlt ist das die delay Zeiten zulang sind und sich der chip auf hängt? Wo liegt der Fehler ? VIELEN DANK
Hi Die Überprüfung auf genau 2,41V wird Dir nicht das gewünschte Ergebnis liefern (da Du nur auf Kleiner und auf Größer prüfst). Die letzte Prüfung kannst Du also weg lassen, statt dem else if nur ein else. Wird die void loop() wirklich laufend aufgerufen? Lasse am Anfang der loop-Routiene einen der Ausgangs-Pins toggeln oder Dir Debug-Werte ausgeben (was ungefähr das Gleiche wäre). Wenn loop() nur 1x aufgerufen wird (... wäre der Name widersinnig), kannst Du die ganzen Abfragen in eine while(1) - Schleife einpacken. MfG PS: Sind die delay-Werte Sekunden? Dann wäre 8000 vll. zu Testzwecken 'etwas' kleiner zu wählen. Auch bei ms wären die Überprüfungen immernoch 8 Sek auseinander (sofern immer wieder aufgerufen wird) ... zum Testen wären mir hier Zeiten von 500ms lieber, da man ja noch was Anderes am Abend vor hat und auch nicht jünger wird ;) MfG²
:
Bearbeitet durch User
DAVID -. schrieb: > Ich habe die Schaltung jetzt mal so um gebaut (siehe plan) > > Kann doch nicht so schwer sein. Ein Voltmeter besitzt Du nicht und einen Spannungsteiler zu rechnen hast Du noch immer nicht nachgelesen? Gemäß Deinem Schaltplan werden am Pin 7 niemals mehr als 1,6V erscheinen.
Hi Manfred schrieb: > Gemäß Deinem Schaltplan werden am Pin 7 niemals mehr als 1,6V > erscheinen. Wurde oben schon erwähnt, daß die beiden Widerstände in dem Plan vertauscht wurden - und wurden auch schon Mal richtig herum gezeichnet :) Bisher sieht es aber eher so aus, daß die loop()-Routine nicht oder nur 1x durchlaufen wird. Warum wurde eigentlich versucht, PB5 am ATtiny85 (Reset) zu beschalten? Wenn dieser Pin nicht mehr RESET ist, ist der Chip nicht mehr per normalem ISP ansprechbar - also im Hobby-Normalfall Edel-Schrott. MfG
Patrick J. schrieb: Die letzte Prüfung kannst Du also weg lassen, statt dem else if nur ein else. Ok danke werde ich ändern und mit toggeln gute Idee mal testen. Und ja die delay-Werte sollen sek sein so das in etwa alle 10 sek eine neue Messung erfolgt. Manfred schrieb: > Ein Voltmeter besitzt Du nicht Hast ja recht habe nur >4< stück. ehm an Pin 7 liegen doch Spannungen bis zu 2,56 Volt an (selber gemessen) Unabhängig davon scheint er KEINE Messung zumachen. egal ob die Spannung am pin 7 (in Software 2) in bereich von 0 - 2,56 Volt liegt ist ihm alles egal. Und der Reset ist ja frei den zu belegen ist Woll nicht so einfach möglich.
Ich habe jetzt noch mal ein andren attiny85 genommen und auf Steckbrett gesetzt mit minimal Beschaltung: VCC 5 volt GND PB3 LED + 3,3 Kohm PB4 An ein Poti um von 0-5 Volt zuregeln. Habe auch mal andere Pins genutzt aber es bleibt beim alten es wird keine Spannung eingelesen oder erkannt. void setup() { pinMode(PB3, OUTPUT); pinMode(PB4, INPUT); digitalWrite(PB3, HIGH); delay(1000); digitalWrite(PB3, LOW); delay(1000); digitalWrite(PB3, HIGH); } void loop() { int sensorValue = analogRead(PB4); float voltage = ((float)sensorValue * (5.00) / 1023.0); if ( voltage < 2.50) (hier scheint es hängen zubleiben egal ob es mehr als 3,5 volt sind oder nicht.) { digitalWrite(PB3, HIGH); delay(500); } if ( voltage > 2.50) { digitalWrite(PB3, LOW); delay(500); } } Hier mal die Ereignisse der Arduino ide: Der Sketch verwendet 1672 Bytes (20%) des Programmspeicherplatzes. Das Maximum sind 8192 Bytes. Globale Variablen verwenden 9 Bytes (1%) des dynamischen Speichers, 503 Bytes für lokale Variablen verbleiben. Das Maximum sind 512 Bytes. C:\Users\S\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0- arduino9/bin/avrdude -C:\Users\S\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0 -arduino9/etc/avrdude.conf -v -attiny85 -cusbasp -Pusb -Uflash:w: C:\Users\S\AppData\Local\Temp\arduino_build_46730/sketch_apr13a.ino.hex: i avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Users\S\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0 -arduino9/etc/avrdude.conf" Using Port : usb Using Programmer : usbasp AVR Part : ATtiny85 Chip Erase delay : 400000 us PAGEL : P00 BS2 : P00 RESET disposition : possible i/o RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 12 4 0 no 512 4 0 4000 4500 0xff 0xff flash 65 6 32 0 yes 8192 64 128 30000 30000 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 Programmer Type : usbasp Description : USBasp, http://www.fischl.de/usbasp/ avrdude: auto set sck period (because given equals null) avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e930b (probably t85) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: auto set sck period (because given equals null) avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: reading input file "C:\Users\S\AppData\Local\Temp\arduino_build_46730/sketch_apr13a.ino.hex " avrdude: writing flash (1672 bytes): Writing | ################################################## | 100% 1.11s avrdude: 1672 bytes of flash written avrdude: verifying flash memory against C:\Users\S\AppData\Local\Temp\arduino_build_46730/sketch_apr13a.ino.hex: avrdude: load data flash data from input file C:\Users\S\AppData\Local\Temp\arduino_build_46730/sketch_apr13a.ino.hex: avrdude: input file C:\Users\SPEED\AppData\Local\Temp\arduino_build_46730/sketch_apr13a.ino. hex contains 1672 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.90s avrdude: verifying ... avrdude: 1672 bytes of flash verified avrdude done. Thank you.
So Problem ist gelöst und Schaltung läuft. Es ist Woll nicht möglich den PB2 zum messen zu nutzen nach sehr langen hin und her habe ihn dann mal auf PB3 gesetzt und den Spannungsteiler raus gehauen und PB2 dafür als Ausgang und es geht ??? Das ist mal komisch aber ok es geht. Habe auch das umrechnen in Volt aufgegeben und die roh werte nutzen lassen. 735//3,602 756//3,702 776//3,800 796//3,900 Danke an alle die mit geholfen haben.
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.