Microcontroller mit Python

OP #6335746
Lesenswert?

Hallo zusammen, mein Name ist Milos ich komme aus der Schweiz und bin 
neu hier :)

Ich studiere zurzeit Maschinenbau und habe ein kleines Projekt am 
laufen, was für mich absolutes Neuland ist.
Ich habe im Studium Python programmieren gelernt (Basic und Advanced). 
Mit dem Thema Micro Controller haben wir uns leider nie beschäftigt.

Ich möchte eine micro Pumpe ansteuern (3.5V) das aber immer zu einer 
bestimmten Zeit, ich versuche es in Worte zu fassen:

-Ruhestand
-Pumpe soll nach einer Zeit X die Pumpe mit Strom versorgen für eine 
Zeit Y
-Ruhestand, wartet wieder bis Zeit X abgelaufen ist um dann wieder die 
Pumpe anzutreiben.

Das wars eigentlich.

Jetzt meine Fragen an euch Spezialisten:
-Welchen Controller nehme ich da?
-Ist Python hierfür geeignet?

Das Pflichtenheft wäre:
-Die Pumpe wird mit 3.5V betrieben
-Alles wird mit einer oder evtl auch 2 Batterien bestromt (xD)
-Der Microcontroller soll so günstig (nicht billig!) wie möglich sein.

Wenn es möglich ist, wäre ich sehr froh auch eine Literaturempfehlung zu 
bekommen über dieses Thema.

Bin gespannt auf eure Gedanken und Anmerkungen! :)

Freundliche Grüsse

Milos
Gast #6335760
Lesenswert?

Milos M. schrieb:
> -Ist Python hierfür geeignet?

Recht neu gibt es CircuitPython - also ja wenngleich es unüblich ist

Milos M. schrieb:
> Ich möchte eine micro Pumpe ansteuern (3.5V) das aber immer zu einer
> bestimmten Zeit, ich versuche es in Worte zu fassen:
>
> -Ruhestand
> -Pumpe soll nach einer Zeit X die Pumpe mit Strom versorgen für eine
> Zeit Y
> -Ruhestand, wartet wieder bis Zeit X abgelaufen ist um dann wieder die
> Pumpe anzutreiben.

Je nachdem wie genau und lang die Zeiträume sein müssen brauchst du eine 
RTC.

Milos M. schrieb:
> Alles wird mit einer oder evtl auch 2 Batterien bestromt (xD)

Batterie ist ein weites Feld: von Knopfzelle bis Autobatterie (ja klar 
ist eigentlich ein Akku)

Batteriebetrieb setzt aber einen sparsamen Mikrocontroller vorraus bzw. 
einen mit für deine Anwendung sinnvollen sleep modes.

Milos M. schrieb:
> Ich möchte eine micro Pumpe ansteuern (3.5V

Wie groß ist die Stromaufnahme? Brauchst du noch Treiber?

Ohne nähere Informationen wird eine konkrete Empfehlung schwierig. 
Allgemein würde ich einem Anfänger Arduino Empfehlen aber sleep modes 
zum Stromsparen wäre schön kein Anfängerthema mehr.
OP #6335781
Lesenswert?

Danke für deine Antwort!

Was die Zeitabstände betrifft kann ich keine konkrete Zahl nennen, es 
können für X maximum etwa 45min sein, Y ist da eher bei unter einer 
Minute, genaueres kann ich erst nach einem Test sagen :)

Und sorry, mit Batterie habe ich mich nicht genau ausgedrückt, habe an 
diese Art gedacht:
https://www.fzr.ch/de-product-batterie_procell_alkaline~lr_3_1_5v

Frage zu dem Sleep mode: ist das etwas, was ich selbst programmieren 
muss oder kommt das mit dem Microcontroller?

Bekannte Daten zur Pumpe sind: 4.5V, 0.18A, 0.91W ist eine China Pumpe 
:)

Wenn du bessere Vorschläge hast, wie man das lösen könnte dann bin ich 
offen dafür auch wenn es etwas komplett anderes ist :)

Grüsse
#6335796
Lesenswert?

Sali Milos,

Fuer eine vernetzte Bewaesserung habe ich die Linkit Duo 7688-module 
hergenommen, die waren aber in letzter Zeit nicht einfach bzw. nicht 
mehr so guenstig (10USD) zu bekommen. Sind aber sehr robust und haben 
einen Atmega drauf.

Python wuerde ich allerdings nur bedingt auf dem uC laufen lassen, es 
gibt einige nette Referenzdesigns mit MicroPython, aber wenn das alles 
richtig zuverlaessig laufen soll, gibt's ein paar Fallstricke.

Drum lasse ich Python lieber im User-Space und die pure Echtzeit im uC.
Auf dem Linkit kannst du firmata oder netpp laufen lassen, dafuer gibt's 
Python-Wrapper.
Gast #6335799
Lesenswert?

Milos M. schrieb:
> Bekannte Daten zur Pumpe sind: 4.5V, 0.18A, 0.91W ist eine China Pumpe

Milos M. schrieb:
> Ich möchte eine micro Pumpe ansteuern (3.5V)

Deine Spannungsangabe zur Pumpe wiederspricht sich... Der Strom setzt 
auf jeden Fall einen Treiber vorraus (Relais, Mosfet etc.).

Milos M. schrieb:
> Und sorry, mit Batterie habe ich mich nicht genau ausgedrückt, habe an
> diese Art gedacht:
> https://www.fzr.ch/de-product-batterie_procell_alkaline~lr_3_1_5v

Und davon 1-2? Das ergibt höchstens etwas über 3V. Bei 1200mAh ist die 
Betriebsdauer mit den angegebenen Einschaltintervallen auch nur wenige 
Wochen (ganz grob überschlagen).

Milos M. schrieb:
> Wenn du bessere Vorschläge hast, wie man das lösen könnte dann bin ich
> offen dafür auch wenn es etwas komplett anderes ist :)

Wenn die Zeitintervalle nicht so richtig genau sein müssen nimm einen 
beliebigen Mikrocontroller (z.B. Atmega / Attiny bzw. einen Arduino) und 
probiere erstmal aus.
Gast #6335801
Lesenswert?

Bei den kleinen Batterien würde ich von sämtlichen Scriptsprachen 
abraten. Übrig bleibt damit praktisch nur noch Bascom (Basic) oder 
C/C++.

Der Sleep Modus muss vom Mikrocontroller und der Beschaltung drumherum 
unterstützt werden. Durch deine Programmierung startest du einen Timer, 
der den Mikrocontroller später wieder aufwecken wird und versetzt ihn 
dann in den Sleep Modus.

Ist Dir klar, dass die Pumpe mit diesen Batterien nur wenige Stunden 
laufen wird?

Wegen dem Sleep Modus kannst du nicht auf die üblichen Arduino Module 
zugreifen. Die Bauteile auf der Platine nehmen zu viel Ruhestrom auf, 
meist mehrere mA.

Also nimmst du besser einen "nackten" Chip und einen sparsamen 
Spannungsregler, zum Beispiel den HT7833. Für die Verbindung zum PC 
brauchst du einen ISP Programmieradapter mit 3,3V Signalen (was auf die 
allermeisten USBASP Sticks trotz 3,3V Jumper nicht zutrifft!).

Bei der Pumpe solltest du klären, ob sie für Batteriebetrieb taugt. 
Deine 4 Zellen haben in frischem Zustand 6 Volt. Die Spannung fällt dann 
aber allmählich bis auf 3,6 Volt ab. Wenn du nur 3 Zellen verwendest, 
geht der Spannungsbereich von 4,5 Volt bis 2,7 Volt.

Du hast geschrieben, dass die Pumpe mit 3,5V betrieben wird. Aber weiter 
unten hast du geschrieben, dass die Pumpe für 4,5V ausgelegt ist. Wenn 
es wirklich fest 3,5V sein sollen, dann brauchst du für die Pumpe einen 
weiteren Spannungsregler, der die Batteriespannung auf 3,5V runter 
bringt und durch den Mikrocontroller steuerbar ist (enable Eingang). 
Auch da musst du wieder auf möglichst geringen Ruhestrom achten. Und 
bedenke, dass Motoren beim Anlaufen locker den 5 bis 10-Fachen Strom 
aufnehmen. Dafür sind diese Batterien meiner Meinung nach schon arg 
knapp bemessen.

Wenn die Pumpe wegen zu wenig Batterieleistung nicht zuverlässig 
anläuft, besteht Gefahr, dass deren Motor durchbrennt.

Dann hast du geschrieben, das das alles mit 2 Zellen versorgt werden 
soll. Die liefern dann aber nur 1,8 bis 3 Volt, nicht 3,5 Volt. Und da 
die Spannung beim Anlaufen der Motoren noch etwas absacken wird, reicht 
das nicht einmal, um den Mikrocontroller zu versorgen. Du brauchst dann 
also einen Step-Up Wandler, der die Spannung erhöht. Aber diese Wandler 
haben eine nicht zu vernachlässigende Ruhestromaufnahme, die für den 
Batteriebetrieb kontraproduktiv ist. Dazu kommt, dass sich durch die 
Wandlung der Eingangsstrom entsprechend erhöht. Ich schätze, dass die 
Pumpe beim Anlaufen rund 1A ziehen wird. Durch den Spannungswandler 
werden etwa 1,5A aus den Batterien gezogen. Das schaffen die nur in ganz 
frischem Zustand. Man kann die Batterien so gar nicht vernünftig 
ausnutzen.

Wenn schon, solltest du unbedingt 4 Zellen Benutzen, sonst wird damit 
niemand glücklich.

Um dich in die Thematik einzulesen, empfehle ich Dir mein Tutorial: 
http://stefanfrings.de/mikrocontroller_buch/index.html

Viel Spaß.
OP #6335811
Lesenswert?

Ihr seid echt alle so geil! Ich danke dir dass du dir die Zeit genommen 
hast mir dass alles so ausführlich zu erklären, denn ich bin eine Niete 
was Elektrotechnik angeht.
Ich werde mir mal deinen Link reinziehen und dann schauen, wie ich dass 
alles machen werde.

Wird wohl ein steiniger Weg für einen der mit Elektrotechnik gar nicht 
klar kommt :)

Danke nochmal!
Gast #6335814
Lesenswert?

Mach Dir nicht zu viel Gedanken wegen der Programmiersprache. Wenn du 
schon eine kannst, wird es Dir leicht fallen, eine weitere zu erlernen.

Das nervigste an C werden wohl die vielen Klammern sein. Probiere es 
einfach mal aus. Kostet ja (fast) nichts.
Gast #6335818
Lesenswert?

Wenn du dir für die Pumpe einen Spannungsregler aussuchst, achte darauf, 
dass er

- einen Enable-Eingang hat, damit du die Pumpen Ein/Aus schalten kannst
- eine geringe Ruhestromaufnahme hat (Quiescent current deutlich kleiner 
als 100µA)
- möglichst wenig Verlustspannung hat (Drop-out Voltage kleiner als 
500mV)
- den Anlaufstrom der Pumpe liefern kann (schätzungsweise 1 Ampere)

Den Anlaufstrom kannst du grob abschätzen, indem du die 
Versorgungs-Spannung durch den Gleichstrom-Widerstand des Motors teilst.
Gast #6335822
Lesenswert?

Stefan ⛄ F. schrieb:

> Bei den kleinen Batterien würde ich von sämtlichen Scriptsprachen
> abraten. Übrig bleibt damit praktisch nur noch Bascom (Basic) oder
> C/C++.

Oder Assembler. Gerade solche ultrasimplen Anwendungen, die ganz 
überwiegend doch nur aus ein paar Registerinitialisierungen und ein 
wenig Pin-Geklimper bestehen, sind so weit einfacher als in jeder 
anderen Sprache umzusetzen, insbesondere dann, wenn man diese andere 
Sprache auch erst lernen muss...
#6335827
Lesenswert?

Stefan ⛄ F. schrieb:
> Bei den kleinen Batterien würde ich von sämtlichen Scriptsprachen
> abraten.

Das würde ich so pauschal nicht sagen.
Es hängt davon ab, wie viel Laufzeit das Programm hat und ob man den 
Mikrocontroller außerhalb dieser Laufzeiten in einen Tiefschlaf 
versetzen kann.

Wenn eine Pumpe nur alle paar Minuten/Stunden/Tage kurz angesteuert 
werden soll, aber das System ansonsten tief schläft (mit 
Microampere-Strom), dann spielt es gar keine Rolle mehr, wie 
"verschwenderisch" das Programm während der im Vergleich zum Schlaf 
kurzen Laufzeit damit umgeht.

z.B. einen ESP32 mit Micropython kann man ohne weiteres sehr sparsam mit 
Batterie betreiben.
#6335834
Lesenswert?

c-hater schrieb:
> Gerade solche ultrasimplen Anwendungen, die ganz
> überwiegend doch nur aus ein paar Registerinitialisierungen und ein
> wenig Pin-Geklimper bestehen, sind so weit einfacher als in jeder
> anderen Sprache umzusetzen, insbesondere dann,

Völliger Quatsch.
Aber was anderes kann man von c-hater ja nicht erwarten.
Selbst ein triviales Pin-einlese-ausgabe-Programm ist in C einfacher zu 
lesen/schreiben/verstehen, als in jeder Asm-Sprache.
Gast #6335841
Lesenswert?

MaWin O. schrieb:
> Völliger Quatsch.

Zur Diskussion, welche Programmiersprache die beste ist und wer den 
längsten hat, möchte ich euch bitten, einen eigenen Thread aufzumachen. 
Da könnt ihr dann eure Präferenzen zum gefühlten 100. mal durchkauen.

Und ich bitte um Entschuldigung, dass ich euch mit meiner Bemerkung dazu 
angestachelt habe.
Gast #6335846
Lesenswert?

MaWin O. schrieb:

> Völliger Quatsch.
> Aber was anderes kann man von c-hater ja nicht erwarten.
> Selbst ein triviales Pin-einlese-ausgabe-Programm ist in C einfacher zu
> lesen/schreiben/verstehen, als in jeder Asm-Sprache.

Du bist ein Dummschwätzer.

Der Unterschied im Umfang des Quelltextes ist minimal. Und ob du nun 
z.B. schreibst:

PORTB |= 1<<PORTB1

vs.

sbi PORTB,PORTB1

Da scheint mit die Assemblervariante schon leichter verständlich zu 
sein, auf jeden Fall für jemanden, der weder C noch AVR8-Assmbler kann. 
Und wenn man die Gegenrichtung hinzunimmt:

PORTB &= ~(1<<PORTB1)

vs.

cbi PORTB,PORTB1

dann wird es doch schon recht eindeutig, was einfacher zu verstehen ist. 
Für Assembler muß einfach bloß nachlesen, was sbi bzw. cbi tun und ist 
schon durch mit dem Thema. Bei der C-Variante muss man hingegen nicht 
weniger als vier Operatoren erlernen, um dieselbe primitive 
Funktionalität auszudrücken...
Gast #6335865
Lesenswert?

Johannes S. schrieb:

> Sowas einfaches geht auch in Hardware mit zwei NE555.

Naja, im Stundenbereich wird's schon einigermaßen unbeherrschbar. Vor 
allem in der Nähe von (Wasser-)Pumpen, denn da ist wohl naturgegeben ein 
wenig Feuchtigkeit nicht weit...

Für einigermaßen reprodizierbare Zeiten würde ich einen kleinen Tiny 
jederzeit vorziehen.
#6335870
Lesenswert?

c-hater schrieb:
> Für einigermaßen reprodizierbare Zeiten würde ich einen kleinen Tiny
> jederzeit vorziehen.

Ja, da muss ich dir zustimmen.
Vor allem auch, weil diese Lösung viel flexibler ist, wenn man doch mal 
andere Zeiten oder Muster fahren will. Hardwareseitig ist ein kleiner 
Tiny auch einfacher, als irgendeine Timerlösung mit Chip, Widerstand und 
Kondensator.
Gast #6335877
Lesenswert?

Sowas lief hier zwei Jahrzehnte als Steuerung für eine Spülung einer 
Umkehrosmose Anlage. In frischem Salzwasser Klima.
Ich würde es aber auch mit μC machen, und auch gleich mit einem 32 
Bitter :)
Gast #6335879
Lesenswert?

Milos M. schrieb:
> Könnt ihr mir einen Link von einem Tiny posten? Habe keine Ahnung was
> das ist dann kann ich mich ein wenig einlesen

Na genau der, der in meinem Buch behandelt wird:
https://ww1.microchip.com/downloads/en/devicedoc/doc2535.pdf
oder etwas neuer:
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf
Gast #6335904
Lesenswert?

MaWin O. schrieb:
> Es gibt keinen Grund den Tiny13 noch in neuen Designs zu verwenden,
> außer vielleicht man hat noch welche da und will die verbauen.

Oder man hat eine Anleitung vorliegen, die sich auf genau den bezieht. 
Die kleinen feinen Unterschiede zu neueren Modellen kann man besser 
später herausfinden, wenn man nicht mehr am allerersten Projekt sitzt. 
Der ATtiny13A ist noch in Produktion.

> Der Tiny13 ist in allen Belangen schlechter als der Tiny25, 45 oder 85.
> Insbesondere auch im Stromverbrauch während des Schlafs.

Das bezweifle ich, aber auf die feinen Unterschiede kommt es in diesem 
Fall sowieso nicht an.

Es scheint mir hier am einfachsten, den µC einfach mit minimaler 
Taktfrequenz durch laufen zu lassen. Beim ATtiny13A sind das 18,75 kHz 
mit einer Stromaufnahme um 100µA.

Beim ATtiny 25, 45 und 85 ist die niedrigste reguläre Taktfrequenz 
31,250 kHz. Ich erwarte da eine Stromaufnahme um 150µA. Viel weiter 
runter geht es ohnehin nicht, weil ohne CPU wenigstens ein Timer laufen 
muss.

Die Batterien würden den µC so etwa ein Jahr lang versorgen können. Die 
Pumpe wird hier die wesentlich kürzere Gesamtlaufzeit dominieren.

Ich habe hier bewusst unterschlagen, dass man den ATtiny auch durch den 
sparsameren 128 kHz Oszillator (geteilt durch bis zu 256) takten kann 
(hmm, jetzt habe ich es doch geschrieben), und zwar aus zwei Gründen:

a) Viele Programmieradapter versagen, nachdem man die Fuses so 
eingestellt hat
b) Der 128 kHz Oszillator ist ziemlich ungenau
Gast #6335933
Lesenswert?

Stefan ⛄ F. schrieb:
> Ich erwarte da eine Stromaufnahme um 150µA. Viel weiter
> runter geht es ohnehin nicht, weil ohne CPU wenigstens ein Timer laufen
> muss.

6,5 µA im Deep Sleep mit Watchdog, da sind 100-150 µA unnötige 
Verschwendung.

es kostet keine 10 min. googlen um gute Erklärungen und Beispiele für 
Arduino zu finden:
https://www.gammon.com.au/power

Ein LPC8xx braucht im Deep Power Down mit Self Wakeup nur 1,3 µA, aber 
den mag hier ja keiner.

Die max. Sleeptime beim Atmega ist wohl 8s, da muss man doch ständig 
aufwachen. Der LPC kann durch den 32 Bit Timer auch tagelang schlafen.
Gast #6335944
Lesenswert?

Johannes S. schrieb:
> 6,5 µA im Deep Sleep mit Watchdog, da sind 100-150 µA unnötige
> Verschwendung.

Wie gesagt ist der 128 kHz Oszillator recht unpräzise. Deswegen empfehle 
ich nicht, den Watchdog als Timer zu benutzen. Wenn du da machst, kannst 
du auch gleich wieder auf die Idee mit dem NE555 (bzw, der CMSO Variante 
davon) zurück kommen.
Gast #6335974
Lesenswert?

Stefan ⛄ F. schrieb:

> Wie gesagt ist der 128 kHz Oszillator recht unpräzise.

Das stimmt zwar, aber wenn's auf Genauigkeit ankommt, können die Tiny 
25/45/85 auch mit einem Uhrenquarz als Taktquelle betrieben werden.

> Deswegen empfehle
> ich nicht, den Watchdog als Timer zu benutzen. Wenn du da machst, kannst
> du auch gleich wieder auf die Idee mit dem NE555 (bzw, der CMSO Variante
> davon) zurück kommen.

Naja, um einiges besser als eine Lösung mit NE555 ist der WD-Oszillator 
immer noch.
Gast #6335976
Lesenswert?

c-hater schrieb:
> Das stimmt zwar, aber wenn's auf Genauigkeit ankommt, können die Tiny
> 25/45/85 auch mit einem Uhrenquarz als Taktquelle betrieben werden.

Wenn man Quarzgenaue Zeiten braucht, sind diese ATtinies natürlich 
besser geeignet, als der ATtiny13A. Man sollte bedenken, dass auch der 
Quarzoszillator Strom verbraucht. Die CPU kann man schlafen legen, aber 
der Oszillator und ein Timer müssen weiter laufen.

> um einiges besser als eine Lösung mit NE555 ist der WD-Oszillator
> immer noch.

Das habe ich anders erlebt. Der 128 kHz Oszillator ist enttäuschend 
ungenau und sehr von Temperatur und Spannung abhängig.
Gast #6336003
Lesenswert?

Johannes S. schrieb:

> Die max. Sleeptime beim Atmega ist wohl 8s, da muss man doch ständig
> aufwachen. Der LPC kann durch den 32 Bit Timer auch tagelang schlafen.

Tja, es ging für die Anwendung aber eher um ATtinys und konkret wurde 
der der Tiny25/45/85 empfohlen. Und der ist diesbezüglich sehr viel 
flexibler.

Er kann zum einen direkt mit einem Uhrenquarz als Systemtaktquelle 
betrieben werden und kann zum anderen diesen Systemtakt schonmal um den 
Faktor 256 reduzieren. Außerdem besitzt er einen Timer1, der im 
synchronen Modus durch 16384 vorteilen kann und natürlich dann nochmal 
durch 256.

Macht alles zusammen quarzgenaue 0,000030517578125 Hz oder anders 
ausgedrückt eine Periode von 32768 s, was so ca. 9,1 h maximaler 
Pennpause entspricht...
#6336008
Lesenswert?

Stefan ⛄ F. schrieb:
> Das habe ich anders erlebt. Der 128 kHz Oszillator ist enttäuschend
> ungenau und sehr von Temperatur und Spannung abhängig.

Ja, der WDT-Oszillator ist extrem ungenau.
Ich finde es jetzt auf die Schnelle nicht im Datenblatt, aber 
erfahrungsgemäß liegt die Abweichung irgendwo zwischen 10% und 20%. Je 
nach Exemplar, Spannung und wahrscheinlich auch Temperatur.
Gast #6336039
Lesenswert?

MaWin O. schrieb:
> erfahrungsgemäß liegt die Abweichung irgendwo zwischen 10% und 20%.

der echte Manfred W. von d.s.e.-FAQ? Wow, das wäre mir einen Glückwunsch 
wert :)

Abweichung kann der LPC8xx auch mehr, der 10 kHz low power Oszi hat 40% 
:) Kann aber auch extern getaktet werden.

Habe mir aus Neugier mal die DS3231 angesehen, die brauchen im Standby 
doch auch nur 1µA und können per Alarm einen µC wecken?
Gast #6336510
Lesenswert?

Man braucht auch gar nicht an den Fuses herumfummeln, wenn man den 
Teiler durch 8 deaktivieren will, denn auch das geht durch Beschreiben 
des CLKPR Registers. Die Fuse gibt nur den Startwert beim Reset vor.
Gast #6337513
Lesenswert?

c-hater schrieb:
> Johannes S. schrieb:
>
>> Sowas einfaches geht auch in Hardware mit zwei NE555.
>
> Naja, im Stundenbereich wird's schon einigermaßen unbeherrschbar. Vor
> allem in der Nähe von (Wasser-)Pumpen, denn da ist wohl naturgegeben ein
> wenig Feuchtigkeit nicht weit...
>
> Für einigermaßen reprodizierbare Zeiten würde ich einen kleinen Tiny
> jederzeit vorziehen.

Ja, wer es kann. Eigentlich ist ein zeitlich festes Muster die 
Kernaufgabe einer einfachen EEPROM-Steuerung: 1 4060 mit Quarz und ein 
EEPROM, z.B. 64k*8

Damit man mit einem Uhrenquarz z.B. im ms-Takt einen Kanal bis zu 64s 
steuern, 2 bis zu 32s … 8 bis zu einer halben Sekunde.

Für jemanden ohne µController ein guter erster eigener Schritt ins 
digitale Zeitalter. Leider (oder zum Glück) gibt es heute keine 
EEPROMMER mehr, so dass der Aufwand heute größer ist als vor 20 oder 30 
Jahren.

Weiter Betriebsspannungsbereich (2 Batterien bis >12V), einfacher Aufbau 
(damals, heute ist ein Tiny kleiner als der Quarz), einfache Logik 
(naja, wenn Daten- als Adressbytes fungieren, wird es auch beliebig 
aufwändig)
Gast #6337519
Lesenswert?

A. S. schrieb:
> Leider gibt es heute keine EEPROMMER meh

Und leider hat der CD4060 nicht an jedem Binärteiler einen Ausgang-Pin. 
Das hätte ich schon oft gut gebrauchen können.

Und dann hätte ich noch gerne eine Kreuzung aus CD4060 und CD4017, also 
einen Dezimalzähler mit Oszillator. Gerne mit mehr als 10 Ausgängen.

Kennt jemand die Postanschrift vom Wunschkonzert?
Gast #6337777
Lesenswert?

Techniker schrieb:
> was mich dann wundert, warum diese eine online fernhochschule
> c/c++
> streicht für eine skriptsprache python...

Weil Python einfach HIP ist ;)
Wenn man es schneller und genauer braucht, dann eben kein HIP'es Produkt 
verwenden.

Ich habe ein Feather M0 von Adafruit mit Micropython, das konnte 
nichtmal die Timer richtig verwenden. Zeitgesteuert geht nur wenn 
zwischendurch nichts anderes gemacht wird....


o/
Anselm
OP #6338196
Lesenswert?

So ein kleines Update:

Ich habe von Air Wick einen Duftspender gekauft, der im 6 12 und 30 min 
Takt einen kleinen Motor mit Strom versorgt.
Motor:LFU130SA 2370-360/DV 
(http://szlh-motor.com/Precious-Metal-brush/LFU130SA.html)

Controller: siehe Bilder

Jetzt meine Frage an euch, denn ich möchte einen Prototypen bauen.

Wie kann ich den Takt selber definieren und von dem vorgegebenem 
wegkommen?
Ich möchte statt dem Takt oben z.B. 30,60 und 90min haben. ist das 
möglich?

Jetzt ist es noch so, dass der Motor nach etwa 1sek zurückdreht, kann 
man das auch verlängern z.B. 15 sek?

Jetzt wird eine Lebenszeit von 60Tagen angegeben, kann man das 
verdoppeln wenn man noch eine zweite Batterie anhängt oder lieg ich da 
falsch?

Grüsse

Milos
Angehängte Dateien:
#6338286
Lesenswert?

Ganz ehrlich... wenn du auf solche langen Laufzeiten aus so kleinen 
Batterien setzen möchtest, musst du dich wohl oder übel mit kleinen 
Mikrocontrollern befassen. Du kannst zum lernen und testen ja einen 
Arduino kaufen und die Pumpe über einen Mosfet z.B. BS107 ansteuern. 
Codebeispiele gibts dann mehr als genug im Netz wo man sich was 
zusammenschnipseln kann.
Wenn das ganze läuft, wechselst du auf einen ATTiny mit 
Minimalbeschaltung siehe das How-to hier auf der Seite.
Den Tiny kannst du dann auch mit dem Arduino programmieren!

Was dir hier keiner abnehmen kann, ist das du dich zumindest mit den 
Grundlagen der E-Technik befassen musst.
Da du studiert hast oder noch dabei bist kann das ja nicht so schwer 
sein neues zu lernen!
OP #6338347
Lesenswert?

yoo Danke dir!
Ich will das selber machen keiner soll es für mich machen. Ich habe 
einfach zu viel nachgedacht was es dann für später bedeutet 
(Serienproduktion).
ich werde mir dann mal einen Arduino ziehen und das dann versuchen. Habe 
ja eh Zeit bis meine mechanische Teile 3D gedruckt sind :D
danke nochmals, werde mich dann auch mit der Anleitung 
auseinandersetzen!

Grüsse
Gast #6338376
Lesenswert?

Milos M. schrieb:
> yoo Danke dir!
> Ich will das selber machen keiner soll es für mich machen. Ich habe
> einfach zu viel nachgedacht was es dann für später bedeutet
> (Serienproduktion).
> ich werde mir dann mal einen Arduino ziehen und das dann versuchen. Habe
> ja eh Zeit bis meine mechanische Teile 3D gedruckt sind :D
> danke nochmals, werde mich dann auch mit der Anleitung
> auseinandersetzen!
>
> Grüsse

Aber heutzutage sollte doch auch im Maschinenbau etwas E Technik und 
etwas Informatik sein, dass ein Maschinenbauingenieur so etwas zustande 
bekommt?

3D Druck läuft??
Dann solltest Du mal die oben genannten/verlinkten Werke durcharbeiten.

Ich glaube auch das microphyton nur hip ist, und langfristig weniger 
c/c++ ablösen wird.
Oder wird es evtl. bald so sein, wie mit asm ?

Ich habe mal asm, c/c++ gelernt und würde da lieber bleiben.
Gast #6338380
Lesenswert?

Aber heutzutage sollte doch auch im Maschinenbau etwas E Technik und 
etwas Informatik sein, dass ein Maschinenbauingenieur so etwas zustande 
bekommt?


Ja, das war schon vor 35 Jahren so, wie ich bestätigen kann
OP #6338389
Lesenswert?

meiner Meinung nach haben wir im MB Studium zu wenig IT und ELT ( in der 
Schweiz zumindest) zwar habe ich jetzt selbst eine Kreiselpumpe 
gezeichnet und das restliche Zeugs zeichne ich noch, jedoch hackts bei 
mir mit der Elektronik, den was bringt mir der mechanische Part, wenn 
kein elektrischer Part existiert..?

Werde mich wohl gröber mit der elektrik auseinander setzen müssen :)
Gast #6338660
Lesenswert?

Also das zeigt mir doch, dass die Elektrotechnik, Informationstechnik 
und der Maschinenbau, zusammen sein sollten.
In der heutigen Zeit sowieso, also Mechatronik.
Überall wird man ja auch mit Englich und BWL zu geflattert, dass man da 
Grundlagen hat.

Naja ich für meinen Teil habe zu wenig Ahnung von Mechanik und 
Maschinenbau, da würde ich gerne mehr von wissen wollen, auch mal für 
das eine oder andere etwas konstruieren können, bzw. berechnen.
Gibt es da auch ein gutes Forum?
Gast #6339544
Lesenswert?

Bekanntlich ist es närrisch oder zumindest wenig zielführend die Zukunft 
voraus sagen zu wollen.

Trotzdem nehme ich das Risiko auf mich mich möglicherweise hoffnungslos 
zu blamieren:

C/C++ wird im mC industriellen Bereich noch lange nicht umzubringen 
sein!

Einfach darum weil viele Industrieprodukte viele Jahre an Erfahrung 
beinheimen die man nicht so leicht über den Haufen wirft. Dann kommt 
noch eine gewisse Resistenz gegen Änderung seitens der "erfahrenen" 
Entwickler.

Die Jungen Speerwerfer kennen manchmal doch nicht ihre eigenen Grenzen 
so gut uns können deshalb existierenden Projekten gefährlich werden.

Wenn Produkte sicherheitszertifiziert sein müssen ist das ein weiterer 
Grund nicht zu vorschnell auf etwas moderneres umzusteigen. Oft lohnt es 
sich deshalb nicht komplexe Produkte zu modernisieren und die 
notwendigen Kosten der Modernisierung tragen zu müssen.  Gerade im Klima 
von zunehmenden Wirtschaftskrisen sollte man mit den Mitteln weise 
vorgehen und nicht mit Hochrisiko Umwegen verprassen.

Auch vertraut man den kommerziellen Entwicklungswerkzeugen durch ihre 
langjährige Existenz und Unterstützung doch mehr als neuen unbekannten 
Werkzeugen die sich noch nicht wirklich im rauen Alltag bewiesen haben. 
Bis man neuen Werkzeugen in der Industrie vertraut muss noch viel Wasser 
die Elbe passieren, meinetwegen auch die Donau;-)

Trotz aller Schrullen und Eigenheiten und Schwierigkeiten die C/C++ in 
sich beinhalten, ist der Feind den man kennt nicht so schlimm wie ein 
unbekannter. Abgesehen davon ist C gar nicht so schlimm wie alle tun. 
Man muss nur diszipliniert arbeiten.

Deshalb wird C/C++ noch lange nicht entthront werden.

Computersprachen kommen und gehen. In der Industrie da baut man eher auf 
Vertrautes auch wenn es nicht Hip ist.

Und jetzt dürft ihr mir die Tür einrennen;-)

Schönen Tag noch vom
Murmeltier

P.S. Da Murmeltiere nicht SW entwickeln brauche ich mich auch nicht zu 
blamieren;-)
Gast #6339606
Lesenswert?

Murmeltier schrieb:

> C/C++ wird im mC industriellen Bereich noch lange nicht umzubringen
> sein!

Dieser Einschätzung würde ich mich anschliessen.

> Dann kommt
> noch eine gewisse Resistenz gegen Änderung seitens der "erfahrenen"
> Entwickler.

Jepp. Das ist ein sehr großes Hindernis bei der Einführung von etwas 
Besserem, wobei Python im hardwarenahen Bereich keinesfalls etwas 
Besseres sein kann, das hat dort als Interpretersprache einfach nix zu 
suchen. Da wäre eher Rust ein Kandidat für die Ablösung von C/C++.

Das kann alles, was C/C++ auch können, schneidet aber die historisch 
gewachsenen Kopfschlingen und Fußangeln dieser Sprachen ziemlich 
gnadenlos ab.
Gast #6339625
Lesenswert?

Ok, dann verstehe ich nicht wieso eine Fernhochschule auf solchen Trend 
eingeht, da wurde ich evtl. deren Auswahl ein wenig bzw. deutlich in 
Frage stellen!



Milos M. schrieb:
> Ein Buch das wir verwenden für die Statik ist technische Mechanik 1 und
> 2, vorausgesetzt wird dass man sehr fit ist in der Vektorrechnung und
> Integralrechnung.
>
> dort ist es super beschrieben
>


Wirkt auf mich, als ob dort eine praktische Anwendung der 
Ingenieurmathematik sinnvoll ausgeführt wird. Somit ist das für mich 
sehr interessant.
Gast #6341997
Lesenswert?

Nach all den eher abstrakten Hinweisen hier ein Versuch, dem TO einen 
praktischen Ansatz zur Lösung seines Problems anzubieten.

Die Aufgabenstellung ist:
- in konstanten Zeitabständen einen Motor ein- und wieder auszuschalten,
- stromsparend für den Batteriebetrieb geeignet und außerdem
- preisgünstig zu sein.

Der Vorschlag, einen Microcontroller wie den ATtiny25 zu verwenden in 
Verbindung mit der Programmierung in Assembler oder C erscheint mir dazu 
zielführend.

Nehmen wir also einen ATtiny25.
Er hat einen RC-Oszillator, der mit 8MHz taktet.
Diesen Takt können wir per Vorteiler 256 auf 8.000.000 / 256 = 31.250 Hz
reduzieren.

Damit füttern wir den Timer/Counter1.
Aber wir benutzen noch dessen Vorteiler, in diesem Fall noch einmal mit 
dem Divisor 256.
Am Ende liegt dann ein Takt an von 31.240 / 256 = 122 Hz.

Mit diesen 122 Impulsen pro Sekunde wird der Counter TCNT1 incrementiert 
und mit seinem Compare-Register OCR1A verglichen.
In dieses Register laden wir den Wert 122.

Immer wenn der TCNT1 den Wert 122 erreicht (also 1x pro Sekunde) wird 
ein
Interrupt ausgelöst.

Bis zu diesem Zeitpunkt lief die gesamte Arbeit in der Hardware des 
Microcontrollers ab.

Nun kommt die Software zum Tragen:

Nach jedem Interrupt wird ein Sekundenzähler um 1 erhöht und der TCNT1 
auf 0 zurückgesetzt.

Anschließend wird geprüft, ob der Zähler den Wert des Einschaltpunktes 
erreicht hat
- dann wird der Motor eingeschaltet -
oder den Wert des Ausschaltzeitpunktes
- dann wird der Motor abgeschaltet und der Sekundenzähler auf 0
  zurückgesetzt.

Der Controller geht nun wieder in den Sleep-Modus - bis zum nächsten 
Interrupt.

Und so weiter ...

Der Programmcode ist ca. 130 Byte lang, benötigt kein SRAM , denn die 
Register reichen für die einzige verwendete Variable - den 
Sekundenzähler - aus.
Die Stromaufnahme habe ich mit ca. 200uA bei 3.5V gemessen.

Das Programm ist nur exemplarisch.
Man würde natürlich einen Uhrenquarz mit 32.768 Hz verwenden, der 
liefert eine genauere Zeitbasis als der RC-Oszillator bei geringerem 
Stromverbrauch.

Aber einen Uhrenquarz hatte ich gerade nicht verfügbar - und eine 
fertige Lösung will ich ja auch nicht liefern.

Ich denke, die Aufgabenstellung ist gut geeignet, um sich in die 
Thematik Microcontroller einzuarbeiten.

Wobei die "Programmierung" in C auch für den Python-Kenner verständlich 
sein sollte.
Schwieriger wird es sein, die Bedeutung/Funktion der Register des ATtiny 
zu verstehen, hier wird die Lektüre des Manuals nicht vermeidbar sein.

Zum Thema Lektüre:
Ich fand das Buch "Mikrocontrollertechnik ..." von Gerhard Schmitt ganz 
hilfreich.

Michael S.
Angehängte Dateien:
Gast #6343154
Lesenswert?

Ein kurzer Nachtrag.

Ich habe doch noch einen 32KHz Uhrenquarz gefunden und die Prescaler im 
Programm angepasst.
Die Stromaufnahme liegt (bei 3.5V) gemessen irgendwo zwischen 50 bis 
100uA.

Einige zunächst unverständliche Probleme hatte ich mir mit dem AVRISP 
mkII Programmer in Verbindung mit dem reduzierten CPU-Takt eingehandelt.

Nach dem ersten, erfolgreichen Programmieren des ATtiny mit diesem 
Prescaler wollte der Programmer den mc nicht mehr finden.
Als Hinweis auf mögliche Fehler wird u.a. die Meldung ausgegeben, dass 
der Programmer maximal mit 1/4 des mc-Taktes arbeiten darf.

Reduziert man der Takt des Programmers auf 4KHz, dann wird der mc wieder 
erkannt.

Die Ursache war:
Der AVRISP mkII schreibt per default mit 125KHz.
Der Takt des RC-Oszillators auf dem ATtiny wird von 8MHz per Prescaler 
256
auf ca. 32KHz reduziert.
Also muss man den Takt auf dem Programmer reduzieren.

Soweit, so gut.

Aber mit dem Umstellen der Fuses auf den Uhrenquarz als Taktquelle trat 
das Problem erneut auf.
Obwohl ich den Prescaler für den mc-Takt auf 1 reduziert hatte.

Schuld war eine Einstellung in den Fuses: LOW.CKDIV8.

Per "Werkseinstellung" wird der Oszillator- bzw. Quarztakt mit dem 
Faktor 8 reduziert.
Aus 32kHz werden also 4 KHz CPU-Takt, der Programmer müsste auf 1KHz 
gestellt werden.
Der kleinste einstellbare Wert beträgt aber 2KHz.

Was lerne ich daraus ?
Den Schalter LOW.CKDIV8 in den Fuses deaktivieren und den CPU-Takt per 
Register CLKPR wählen.

Mein Lehrgeld: 3 "verfusede" ATtinys.

Michael S.
Angehängte Dateien:
Gast #6343168
Lesenswert?

Michael S. schrieb:

> Mein Lehrgeld: 3 "verfusede" ATtinys.

Verfused sind sie nur, wenn man nicht den richtigen Programmer hat...

Man benutzt also am besten einen, dessen Code man selbst unter Kontrolle 
hat und deshalb leicht an "besondere" Anforderungen anpassen kann...

Gerade im "low energy"-Bereich ist das oft wichtig. Aber auch im 
extremen "low cost"-Bereich (minmaler Pin-Count). Und am Wichtigsten 
natürlich, wenn beides auch noch gemeinsam eintritt...
Gast #6343202
Lesenswert?

Michael S. schrieb:
> Die Stromaufnahme liegt (bei 3.5V) gemessen irgendwo zwischen 50 bis
> 100uA.

Also doch noch etwas weniger als ich geschätzt habe. Das ist doch schon 
super, da würde ich mir um Sleep Modi keine Gedanken mehr machen.

Michael S. schrieb:
> Der kleinste einstellbare Wert beträgt aber 2KHz.
> Mein Lehrgeld: 3 "verfusede" ATtinys.

Sind die 2 kHz wirklich das Minimum oder ist das bloß eine Einschränkung 
deiner GUI? Schonmal avrdude (mit Parameter -B 2000) probiert?

Ich hatte das gleiche Problem mit einem Programmieradapter von der Firma 
In-Circuit. Doch wenige Wochen nach meiner Reklamation bekam ein ich 
einen neuen mit verbesserter Firmware zugeschickt, der langsam genug 
takten konnte - sogar automatisch.

Da du die Teile gerade vorliegen hast, kannst du mal ausprobieren, wie 
stark sich die Stromaufnahme bei Taktfrequenz 32 kHz versus 4 kHz (oder 
noch weniger) verändert? Meine Vermutung: gar nicht. Leider gehen die 
Diagramme im Datenblatt nicht so weit, dass man das dort ablesen könnte.
Gast #6343227
Lesenswert?

Stefan ⛄ F. schrieb:

> Da du die Teile gerade vorliegen hast, kannst du mal ausprobieren, wie
> stark sich die Stromaufnahme bei Taktfrequenz 32 kHz versus 4 kHz (oder
> noch weniger) verändert? Meine Vermutung: gar nicht. Leider gehen die
> Diagramme im Datenblatt nicht so weit, dass man das dort ablesen könnte.

Die kannst sie getrost linear extrapolieren. Das passt schon fast. Der 
Fehler zur Realität liegt unter 20%.
Gast #6343234
Lesenswert?

c-hater schrieb:

> Die kannst sie getrost linear extrapolieren. Das passt schon fast. Der
> Fehler zur Realität liegt unter 20%.

Ergänzend:
In extremer, mit internen Mitteln erreichbarer Nähe zu 0Hz. Darüber wird 
er immer geringer. Man kann natürlich noch weitaus geringere Takte 
extern einspeisen, dann entfernt sich das immer mehr vom linearen 
Zusammenhang und konvergiert gegen den Ruhestrom aller mit Energie 
versorgter Gatter im Chip...

Sollte logisch und selbsterklärend sein...
Gast #6343497
Lesenswert?

Hier die Stromaufnahme bei 3.5V mit einem Diagitalmultimeter
an ATtiny45 gemessen:

32KHz, Prescaler 1, Interrupt 1x pro Sekunde
60uA bzw. 110uA, im Sekundentakt wechselnd
(vermutlich wegen schaltendem PINB.0 - ohne Last)

wie oben, nur der Prescaler ist geändert:
32KHz, Prescaler 8, Interrupt 1x pro 8 Sekunden
30uA fast konstant, kurzzeitig auf 20uA abfallend

Genauere Analysen konnte ich nicht anstellen, weil der ATtiny
nach dem 1. Flashen nicht mehr ansprechbar war.

Ich arbeite mit ATMEL Studio 7, da kann der Takt des AVRISP nur
bis 2KHz reduziert werden.

Das Flashen dieser extrem langsam taktenden mc's scheint problematisch,
zumindest mit meinen Tools.

Michael S.
Gast #6343507
Lesenswert?

Michael S. schrieb:
> wie oben, nur der Prescaler ist geändert:
> 32KHz, Prescaler 8, Interrupt 1x pro 8 Sekunden
> 30uA fast konstant, kurzzeitig auf 20uA abfallend

Dann bringt das ja doch noch deutlich was. Gut zu wissen.

> Das Flashen dieser extrem langsam taktenden mc's
> scheint problematisch, zumindest mit meinen Tools.

Nicht nur mit deinen, daran scheitern viele Produkte.

Du kannst da einfach einen schnelleren Takt an XTAL1 (ohne Quarz) 
einspeisen, dann kommst du wieder heran.
Gast #6343551
Lesenswert?

Stefan ⛄ F. schrieb:

> Du kannst da einfach einen schnelleren Takt an XTAL1 (ohne Quarz)
> einspeisen, dann kommst du wieder heran.

Das kannste knicken! Bei auf einen INTERNEN Takt gefuseten Teilen 
klappt dieser Trick nicht, denn da spielt der Takt an XTAL1 überhaupt 
keine Rolle.

Das einzige, was hier noch helfen kann, wenn der Programmer nicht weit 
genug herunterkommt, ist der Trick mit dem Reset-Hold, so dass zumindest 
die per Software (via CLKPR) herbeigeführte Taktreduktion ausser Gefecht 
gesetzt wird.
Gast #6343552
Lesenswert?

c-hater schrieb:
> Das kannste knicken! Bei auf einen INTERNEN Takt gefuseten Teilen
> klappt dieser Trick nicht, denn da spielt der Takt an XTAL1 überhaupt
> keine Rolle.

Ja aber er ist doch auf 32kHz Quarz konfiguriert - hatte ich zumindest 
so verstanden. Wegen:

Michael S. schrieb:
> 32KHz, Prescaler 1
> wie oben, nur der Prescaler ist geändert:
> 32KHz, Prescaler 8

Da müsste ja sonst 128 kHz oder 8 MHz stehen.
Gast #6343578
Lesenswert?

S. Landolt schrieb:

> An XTAL2 (sic!) z.B. 200 kHz anlegen.

Das soll funktionieren? Ich möchte das jetzt nicht völlig ausschließen, 
aber es ist meines Wissens nach rein garnichts dokumentiert, was in 
irgendeiner Form darauf schließen lassen könnte.

Falls doch, würde mich die Quelle stark interessieren.
Gast #6343595
Lesenswert?

S. Landolt schrieb:

> Wie wäre es mit Ausprobieren, c-hater? Sie sind doch sonst nicht so
> schwerfällig.

Das ist nicht der Punkt, natürlich könnte ich das Ausprobieren, sehe 
aber kein Notwendigkeit dazu, weil ich einen Programmer besitze, der für 
alle denkbaren Situationen gerüstet ist.

Mich hat halt nur interessiert, wie du auf diese Idee gekommen bist.
Gast #6343601
Lesenswert?

> wie du auf diese Idee gekommen bist
Kann ich nicht mehr sagen, ist Jahre her. Nachträglich finde ich es 
logisch, wenn ich mir diesen Low-Power-Quartz-Oscillator vorstelle, aber 
vielleicht hatte ich damals auch nur die Anschlüsse verwechselt.
Gast #6343639
Lesenswert?

Ich habe das jetzt mit einem ATtiny85 ausprobiert. Folgendes hängt dran:

Programmieradapter: Atmel ISP mkII
Stromversorgung: Drei NiMh Zellen
Taktversorgung: Externer Quarz Oszillator 4 MHz über 220Ω mit XTAL1 
verbunden

Fuse für 32kHz Quarz einstellen:
1
stefan@stefanpc:/opt/AVR8-Burn-O-Mat$ sudo avrdude -c avrispmkii -P usb -B 200 -p attiny85 -U lfuse:w:0x66:m
2

3
avrdude: AVR device initialized and ready to accept instructions
4

5
Reading | ################################################## | 100% 0.02s
6

7
avrdude: Device signature = 0x1e930b (probably t85)
8
avrdude: reading input file "0x66"
9
avrdude: writing lfuse (1 bytes):
10

11
Writing | ################################################## | 100% 0.02s
12

13
avrdude: 1 bytes of lfuse written
14
avrdude: verifying lfuse memory against 0x66:
15
avrdude: load data lfuse data from input file 0x66:
16
avrdude: input file 0x66 contains 1 bytes
17
avrdude: reading on-chip lfuse data:
18

19
Reading | ################################################## | 100% 0.01s
20

21
avrdude: verifying ...
22
avrdude: 1 bytes of lfuse verified
23

24
avrdude: safemode: Fuses OK (E:FF, H:DF, L:66)
25

26
avrdude done.  Thank you.

Stromversorgung aus und wieder an. test:
1
stefan@stefanpc:/opt/AVR8-Burn-O-Mat$ sudo avrdude -c avrispmkii -P usb -B 200 -p attiny85
2

3
avrdude: stk500v2_command(): command failed
4
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Unknown status 0x00
5
avrdude: initialization failed, rc=-1
6
         Double check connections and try again, or use -F to override
7
         this check.
8

9
avrdude done.  Thank you.

Kacke.

Taktquelle auf XTAL2 umgelötet:
1
stefan@stefanpc:/opt/AVR8-Burn-O-Mat$ sudo avrdude -c avrispmkii -P usb -B 200 -p attiny85
2

3
avrdude: AVR device initialized and ready to accept instructions
4

5
Reading | ################################################## | 100% 0.02s
6

7
avrdude: Device signature = 0x1e930b (probably t85)
8

9
avrdude: safemode: Fuses OK (E:FF, H:DF, L:66)
10

11
avrdude done.  Thank you.

Jetzt bin ich aber verunsichert. Ich hatte bisher immer den externen 
Takt an XTAL1 angeschlossen. Ist das jetzt eine Besonderheit für den 
Low-Frequency Oscillator oder soll man den Takt immer an XTAL2 
einspeisen?
Gast #6343657
Lesenswert?

Ich habe noch weiter experimentiert. Diese Versuche habe ich mit zwei 
220 Ω Widerständen zwischen dem 4 MHz Oszillator und dem ATtiny85 
gemacht.

Wenn die Fuse auf "High-Frequency Crystal" eingestellt ist, kann ich den 
externen Takt wahlweise an XTAL1 oder XTAL2 oder auch beiden Pins 
gleichzeitig einspeisen.

Wenn die Fuse auf "Low-Frequency Crystal" eingestellt ist, muss ich den 
externen Takt an XTAL2 einspeisen. Beide Pins gleichzeitig geht auch. 
Nur XTAL1 alleine geht nicht.

Offenbar ist der Low-Frequency Oszillator völlig anders aufgebaut, als 
der normale. Hat jemand irgendwelche Infos dazu? Im Datenblatt steht 
dazu nur das:

"XTAL1 and XTAL2 are input and output, respectively, of an inverting 
amplifier which can be configured for use as an On-chip Oscillator"

Ganz so einfach ist es aber offenbar doch nicht. Sonst hätte ich im 
"High-Frequency" Modus den Talk wohl kaum wahlweise und sogar 
gleichzeitig an beiden Pins einspeisen können. Außerdem widerspricht die 
Info den Beobachtungen im "Low-Frequency" Modus.
Gast #6343673
Lesenswert?

Hier ist noch eine andere Appnote, wo es ausdrücklich um den 32 kHz 
Quarz geht. Wieder wird die gleiche Innenschaltung gezeigt.

Ich verstehe es nicht! Gemäß Datenblatt und dieser beiden Appnotes muss 
man den Takt immer an XTAL1 einspeisen. Dennoch hat S. Landolt 
herausgefunden, dass es beim "Low-Frequency" Oszillator XTAL2 sein muss 
und ich konnte das im Versuch bestätigen.

Für mich bricht da eine kleine Welt zusammen, denn ich verlasse mich 
immer auf die Datenblätter.
Angehängte Dateien:
(Firma: Rast und Ruh) #6343695
Lesenswert?

Nachdem ich mir die "Datasheet Revision History" für den ATtiny85 
angeschaut habe, hat mich Stefans Überraschung überrascht(weil da so 
einiges im Laufe der Zeit korrigiert wird)...:)

Es wird der Oszillator nur bei
1
9.6 Rev. 2586L-06/10
2
    Table 6-11, “Capacitance of Low-Frequency Crystal Oscillator,” on page 29
3
9.11 Rev. 2586G-05/06
4
    3. Updated “Low-Frequency Crystal Oscillator” on page 29.

erwähnt. Aber das ist glaube ich nicht eine komplette 
Schaltungsänderung, was diesen kuriosen Fund von euch beiden erklären 
würde.

Btw. Spannend;)
Gast #6343885
Lesenswert?

> Offenbar ist der Low-Frequency Oszillator völlig anders aufgebaut, als
> der normale.

Klar, die 32khz Quarze haben eine hoehere Guete und sind viel 
empfindlicher. Deshalb ist es auch so schwer sie ueberhaubt ans 
Schwingen zu bringen wenn man sowas mal komplett selber baut. Sie 
duerfen nur wenig belastet werden.

Olaf
Gast #6344172
Lesenswert?

Um doch noch einmal kurz auf die Ausgangsfrage dieses Threads 
zurüclzukommen:

Es ist möglich, mit einem ATtinyxx und einem externen Uhrenquarz die 
Stromaufnahme durch Heruntertakten des CPU-Taktes soweit zu reduzieren,
dass ein Batteriebetrieb möglich ist.

Der Prescaler für den Oszillator in Verbindung mit dem Compare-Register 
bestimmen
die Stromaufnahme und das Zeitintervall für die Zeitbestimmung.

Kritisch ist die Tatsache, dass der Programmieradapter maximal mit 1/4 
des CPU-Taktes arbeiten darf.
Bei zu geringem CPU-Takt ist eine weitere Programmierung u.U. nicht mehr 
möglich.

Als Workaround könnte man den ATtiny nach dem Reset für einige Zeit mit 
dem Prescaler 1 laufen lassen und erst nach Aablauf der Wartezeit in 
einen niedkrigeren Takt wechseln.

Unmittelbar nach einem Reset sollte man den mc beschreiben bzw. auslesen 
können.


Zum Rettungsversuch  meiner "verfuseden" ATtinys:

Da Anlegen eines Rechtecksignals von 3V hat bei mir keinen Erfolg 
gebracht (Problem: CKDIV8 ist gesetzt).
Mit dem Uhrenquarz arbeitet der mc (die LED blinkt), bei gezogenem 
Uhrenquarz tut sich nichts - wie zu erwarten.
Daran ändert sich aber auch nichts, wenn ich ein Rechtecksignale von 
30-200KHz an XTAL2 anlege.

Auch der Programmer zeigt sich unbeeindruckt und verweigert unverändert 
die Zusammenarbeit.

Aber davon geht die Welt nicht unter.

Michael S.
Gast #6344202
Lesenswert?

Michael S. schrieb:
> kann der Takt des AVRISP nur bis 2KHz reduziert werden
> ... keinen Erfolg  ...

Das wundert mich - 200 kHz/8 /4 = 6250 Hz, also sollten die 2 kHz locker 
reichen.

> Aber davon geht die Welt nicht unter
Schon, mein Angebot für einen 'fuse-resetter' gilt trotzdem.
Gast #6344204
Lesenswert?

Michael S. schrieb:
> Als Workaround könnte man den ATtiny nach dem Reset für einige Zeit mit
> dem Prescaler 1 laufen lassen und erst nach Aablauf der Wartezeit in
> einen niedkrigeren Takt wechseln.

Der Programmieradapter zieht doch /Reset auf Low, so dass das Programm 
nicht startet. Daher müsste der Prescaler ohnehin unverändert (wie von 
der Fuse vorgegeben) bleiben. Die Wartezeit erscheint mir daher nicht 
notwendig.
Gast #6344223
Lesenswert?

Michael S. schrieb:
> Es ist möglich, mit einem ATtinyxx und einem externen Uhrenquarz die
> Stromaufnahme durch Heruntertakten des CPU-Taktes soweit zu reduzieren,
> dass ein Batteriebetrieb möglich ist

Batteriebetrieb ist auch völlig ohne Schlafmodi möglich. Es kommt immer 
darauf an, welche Laufzeit man mit welcher Energie erreichen möchte/muß.

Geschätzt braucht Deine Pumpe zur Laufzeit etwa 120 mA, was bei einer 
Einschaltdauer von 30/3600 Stunden 1 mAh entspricht. Selbst, wenn der µC 
dauerhaft 1 mA aufnimmt, ist der Wirkungsgrad schon bei 50%.
Eine Stromaufnahme < 100 µA reduziert die Verluste schon auf < 5%, was 
mit 32 kHz auch ohne Schlafmodus erreichbar ist.
Ob weitere Reduzierung notwendig ist, muß der TO entscheiden. Wenn die 
Stromaufnahme in den µA Bereich gebracht werden soll, ist es schon 
wichtiger, die Schaltung trocken zu halten, damit nicht Leckströme die 
Batterie entladen.
Gast #6344264
Lesenswert?

S. Landolt schrieb:
> Schon, mein Angebot für einen 'fuse-resetter' gilt trotzdem.

Danke für das Angebot, aber wie kriege ich das HEX-File auf den mc ?
Ich kann ja nichts schreiben.

Stefan ⛄ F. schrieb:
> Der Programmieradapter zieht doch /Reset auf Low, so dass das Programm
> nicht startet. Daher müsste der Prescaler ohnehin unverändert (wie von
> der Fuse vorgegeben) bleiben. Die Wartezeit erscheint mir daher nicht
> notwendig.

Hatte ich auch gedacht.
Aber nachdem ich gestern den Prescaler auf 8 gesetzt habe, war ich 
ausgesperrt.

S. Landolt schrieb:
> Das wundert mich - 200 kHz/8 /4 = 6250 Hz, also sollten die 2 kHz locker
> reichen.

Hat mich auch gewundert.

Auf einem Controller hat es möglicherweise funktioniert,
Ich bin mir aber nicht sicher, ob ich bei diesem mc wirklich
die fuses auf low freq gesetzt hatte oder irrtümlich auf externem Takt.
Außerdem hatte ich beobachtet, dass ich den Takt sowohl an XTAL! als 
auch an XTAL2 anlegen kann.
In beiden Fällen hat der mc wieder getaktet

Michael S.
Gast #6344270
Lesenswert?

> Danke für das Angebot, aber wie kriege ich das HEX-File auf den mc ?
Sie schreiben das Programm auf einen erreichbaren AVR8, schließen danach 
diesen (mit den nötigen vier Leitungen) an den nicht erreichbaren 
ATtiny85 an und starten das Programm.
Gast #6344450
Lesenswert?

Michael S. schrieb:
> Hatte ich auch gedacht.
> Aber nachdem ich gestern den Prescaler auf 8 gesetzt habe, war ich
> ausgesperrt.

Vielleicht wird die CLKDIV8 Fuse nicht beim Reset sondern erst danach 
angewendet. Dann könnte ein Programm den folgenden Programmiervorgang 
blockieren, wenn es den Takt bis dahin bereits herabgesetzt hat.
Gast #6344825
Lesenswert?

Stefan ⛄ F. schrieb:
> Der Programmieradapter zieht doch /Reset auf Low, so dass das Programm
> nicht startet. Daher müsste der Prescaler ohnehin unverändert (wie von
> der Fuse vorgegeben) bleiben. Die Wartezeit erscheint mir daher nicht
> notwendig.

Wird wohl doch so stimmen.
Man muss aber den Reset und den Programmer genau zum richtigen Zeitpünkt 
starten.
Mit der Verzögerung läuft das wesentlich entspannter.
Aus dem laufenden Programm auf dem mc bringt ein Reset durch den 
Programmer
keinen Erfolg.

S. Landolt schrieb:
> Sie schreiben das Programm auf einen erreichbaren AVR8, schließen danach
> diesen (mit den nötigen vier Leitungen) an den nicht erreichbaren
> ATtiny85 an und starten das Programm.

Hört sich plausibel an, würde ich gerne ausprobieren.
Habe mir zwar auch schon avrdude heruntrrgeladen, aber den avrisp kann 
ich nicht zur Zusammenarbeit überreden.
Und die Beschreibungen im www zur Installation eines Treibers sind 
abenteuerlich.

Übrigens habe ich heute die Stromaufnahme noch einmal gemessen:
Prescale  8: knapp über  60uA
Prescale 16: knapp unter 60uA

Das sind wohl eher Anhaltswerte.

Michal S.
Gast #6344855
Lesenswert?

> würde ich gerne ausprobieren

Ich gehe mal davon aus, dass Sie
a) mit avrasm2 assemblieren können (wg. 'ATMEL Studio 7')
b) der Mastercontroller ebenfalls ein ATtiny85 ist
Falls nicht (oder sonst Probleme auftreten sollten) melden Sie sich 
einfach noch mal.
Angehängte Dateien:
Gast #6344890
Lesenswert?

Stefan ⛄ F. schrieb:
> Der wird bestimmt unterstützt. Um welches Produkt genau handelt es sich
> beim "avrisp"?

AVRISP mkII, produziert 04/2011
meldet sich immer mit dubiosen Seriennr. 0xFFFFFF....

Unter Windows 10 und ATMEL STUDIO 7 läuft das Teil.
Und ATMEL STUDIO 7 verwnde ich nur deswegen damit ich stressfrei unter 
Windows 10 mc's flashen kann.

S. Landolt schrieb:
> Ich gehe mal davon aus, dass Sie
> a) mit avrasm2 assemblieren können (wg. 'ATMEL Studio 7')
> b) der Mastercontroller ebenfalls ein ATtiny85 ist

Ich werde es versuchen. Ist ein paar Tage her, dass ich Assembler 
benutzt habe. Es war aber schon erstaunlich, was mit einem ATtiny15 
anfangen konnte.

Michael S.
Gast #6344926
Lesenswert?

Michsel S. schrieb:
> AVRISP mkII, produziert 04/2011
> meldet sich immer mit dubiosen Seriennr. 0xFFFFFF....

Vermutlich nicht original.

Auf jeden Fall unterstützt avrdude ihn. Der Orignale kann bis auf 50 Hz 
herunter getaktet werden.

Gibe mal das ein:

avrdude -c avrispmkii -P usb -B 2000 -p attiny85

Er müsste dann die Chip-ID und die Fuses auslesen und anzeigen.

Unter Linux musst du es eventuell als root User ausführen, um Zugriff 
auf den USB Port zu bekommen. Oder alternativ mit "sudo avrdude ..." 
oder die Zugriffsrechte mit einer "udev rules" Datei konfigurieren.

Unter Windows musst du den libusb Treiber so installieren: 
http://stefanfrings.de/avr_tools/libusb.html
#6345026
Lesenswert?

Ich hatte auch den Eindruck, wenn man in der Applikation den Prescaler 
runter setzt, läßt sich der ATtiny25 am Uhrenquarz nicht mehr 
programmieren.
Ich hatte erst gedacht, der Prescaler überlebt ein Reset. Startet die 
Applikation, hat er aber zuerst immer den vollen Takt. Meine Vermutung 
ist daher, daß bei Reset = Low der Prescaler noch gesetzt bleibt. Erst 
die 0->1 Flanke des Resetpins setzt den Prescaler zurück.
Gast #6345201
Lesenswert?

Peter D. schrieb:
> Meine Vermutung
> ist daher, daß bei Reset = Low der Prescaler noch gesetzt bleibt. Erst
> die 0->1 Flanke des Resetpins setzt den Prescaler zurück.

Das würde erklären, warum ich früher mal einen ATTiny retten konnte, 
indem ich /Reset fest mit GND verbinde und erst dann die Stromversorgung 
einschalte. Ohne diese Maßnahme konnte ich ihn nicht mehr programmieren. 
Mein damaliger Programmieradapter verlange mindestens 32 kHz Systemtakt.
Gast #6345207
Lesenswert?

Stefan ⛄ F. schrieb:

> Das würde erklären, warum ich früher mal einen ATTiny retten konnte,
> indem ich /Reset fest mit GND verbinde und erst dann die Stromversorgung
> einschalte.

Genau: Der eigentliche Trick ist der zwischenzeitliche Power-Cycle. 
Dadurch wird die Hinterlassenschaft des Programms in CLKPR "gelöscht" 
und der Reset-Hold beim PowerUp sorgt dann dafür, dass das Programm auch 
nicht wieder zum Zuge kommt.

Man hat dann also den per Fuses konfigurierten Takt zum Programmieren.
Gast #6345466
Lesenswert?

S. Landolt schrieb:
> Kein Problem, hier ist das Intel-Hex-File. Sie benötigen aber natürlich
> die Anleitung aus dem Sourcefile

Danke, das war aber nicht nötig.
Die asm kann ich ansatzweise verstehen und konnte sie selbst kompilieren 
(lassen).
Die Rettung der Tinys ist mir leider trotzdem nicht gelungen.

Was ich beobachte:

Das Programm zieht Reset auf gnd.
Kurz danach liegt an clk ein Signal an.
Einen Tuck später wackelt mosi.
Aber an miso herrscht Stille.
Nach ca. 4 Sekunden ist das Programm beendet, clk liegt auf high
(= Fehler).

Ich habe Pin0 (mosi) auch testhalber an mosi vom Target angeschlossen.
Und clk an XTAL1 / 2. Immer der gleich Ablauf.
Ich vermute, dass die ChipId nicht zurückgeliefert wird.


Stefan ⛄ F. schrieb:
> Unter Windows musst du den libusb Treiber so installieren:
> http://stefanfrings.de/avr_tools/libusb.html

Danke für die Beschreibung. Die hat mir Mut gemacht, das Abenteuer zu 
wagen.
Hat auch recht gut geklappt, avrdude erkennt nun den avrsipmkII.

Mit dem Parameter -B 20000 konnte ich die lfuse auf 0x62 setzen.
Jetzt funktionieren alle Tinys wieder !

Danke an alle für die Hilfe.

Michael S.
#6863083
Lesenswert?

Hallo Ihr Lieben,

hat ganz schön gedauert bis ich hier im Thread unten angekommen bin. Es 
ging ja los mit Microcontroller mit Python.

Also auch wenn die Aufgabenstellung ja sehr einfach ist, will ich mal 
die Lanze für Python brechen. Es gibt ja etliche Kontroller auf denen 
Circuitpython läuft. Das heißt wenn man Erfahrung mit Python hat, macht 
das schon Spaß damit zu arbeiten. Speziell beim Probieren mit Sensoren 
und Servos.
Auch der schnelle Zugriff mit der Kommandozeile. Wenn man einen 
Controller mit Wifi hat, kann man dann die Pumpe auch aus der Ferne 
überwachen. Python hat auch seine Vorteile wenn man ein KI bauen will. 
Speziell bei der Auswertung von Kamerabildern hat man es dann mit 
Assembler schwerer. Klar man kann auch Neuronale Netze am PC erstellen 
und dann daraus ein C Programm generieren lassen, welches dann natürlich 
sehr viel schneller auf kleinen Kontrollern läuft. Also wenn man jetzt 
ein so einfaches Projekt mit Python löst, hat es den Vorteil, wenn dann 
die Aufgabenstellung komplexer wird, man schon etwas in der Materie 
drinsteckt. Sich mit einem ATtiny85 und Co. zu beschäftigen erweitert 
natürlich den Horizont für die Basics. Es ist auch die Frage wieviel 
Zeit man zur Verfügung hat zum Ziel zu kommen und auf welchem Gebiet es 
Sinn macht sich weiter zu entwickeln.

Na dann noch viel Spaße beim Entwickeln und Tüfteln.
Grüße Nils

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren