Forum: Mikrocontroller und Digitale Elektronik Attiny85 wie progamiere ich mit AVR eine SRV


von Lutz T. (microlutz)


Lesenswert?

Hallo zusammen,

ich bin neu hier und habe auch gleich große Pläne mit meinen Attiny85
Leider habe ich nicht viel Ahnung vom programmieren und hoffe deshalb es 
kann mir hier jemand helfen.

Ich möchte gern einen Stromstoßschalter mit Rückfallverzögerung auf 
meinen Attiny85 aufspielen.
Das ganze soll wie folgt aussehen, Taster PB4 gegen Masse geschalten und 
PB0 als Ausgang High aktiv
Wenn ich den Taster ein mal betätige, soll eine LED am Ausgeng PB0 
leuchten und nach zirka 5min von alleine ausgehen. Wenn ich aber den 
selben Taster an PB4 zum zweiten mal betätige soll die LED sofort 
ausgehen.
Wenn ich den Taster dann wieder betätige soll die LED wieder 5min lang 
an sein und dann von allein ausgehen wenn man den Taster nicht betätigt 
(sonst sofort aus.)

Ein ganz prima Sache wäre dann noch wenn man es hinbekommen könnte 
zusätzlich über ein High oder Low Signal am PB3 als (Schalter gesehen)
das Programm wahlweise nur als Stromstoßschalter (selbe Funktion ohne 
Zeit)
und als Stromstoßschalter mit Rückfallverzögerung.

Ist das machbar mit dem Attiny85?

von Falk B. (falk)


Lesenswert?

Ja, das geht sogar auf dem kleinsten Tiny13.

von Lutz T. (microlutz)


Lesenswert?

Ok und gibt es hier jemand der so was auf die schnelle mal programmieren 
kann am besten in Assembler? Das ganze wäre mir auch 20€ wert. Ich meine 
ich habe zwar einen normalen Stromstoßschaler programmiert bekommen aber 
das hat schon mal einen Monat Zeit und ein haufen nerven gekostet. Und 
Ich dachte mal so, hier gibt es doch bestimmt viele die so was in 
handumdrehen hinbekommen weil sie vielleicht gerade ähnliche Programme 
abgespeichert irgendwo rumliegen haben und auch so mit Programmieren 
viel mehr zu tun haben als ich.

von Falk B. (falk)


Lesenswert?

Frag mal den ASM-Papst Moby ;-)

von Oldie (Gast)


Lesenswert?

Soll jetzt hier jemand das Programm rüberreichen?
Und wenn das jemand macht, womit spielst du es auf den
Tiny85?

Hast du dir überhaupt schon ein paar Gedanken gemacht, wie
das Programm funktionieren könnte?

- Tast-Erkennung?
- Zeitliche Abläufe?
- Logik für die gewünschten Funktionen?

von Lutz T. (microlutz)


Lesenswert?

Also ich habe doch einen Programmer auf isp basis hab damit auch schon 
paar kleine Sachen programmiert.
Dann ja, ich  dachte mir sendet jemand das fertige Programm per Mail und 
der bekommt dann die 20€ überwiesen ganz einfach.

von Karl M. (Gast)


Lesenswert?

Lutz,

wie schnell läuft der AVR t85, 1MHz, 8MHz oder mit 16MHz ?

von Karl M. (Gast)


Lesenswert?

Lutz,

jede Hochsprache erzeugt als Zwischenschritt AVR Assembleranweisungen,
reicht Dir das ?

von Max D. (max_d)


Lesenswert?

Also in C mach ich das in 10-20 Minuten.
Assembly is nich so mein Ding.
Bist du im Stande dem tiny die benötigten Rahmenbedingungen (stabile 
Versorgung, Max. 40 mA am Ausgang, usw.) zu liefern?

von Microlutz (Gast)


Lesenswert?

Der Attiny85 hat 8MHz max, aber für 5min braucht man bestimmt ein 
Vorteiler.

Wegen  den in C Programmieren naja wenn es funktioniert ist es natürlich 
auch ok. Leider hat mein Programmer mit C immer mal ein paar Probleme 
bringt immer Fehlermeldung und programmiert erst nach den zwanzigsten 
mal selbst bei
Musterprogrammen.

Mit Assembler läuft immer gleich alles kann aber eine Einstellungsfrage 
sein.

Also wenn es mit C bei mir läuft gibt es die 20€ natürlich auch.

von Microlutz (Gast)


Lesenswert?

Wegen der Spannungsversorgung, also die ganze Schaltung soll 
letztendlich auf 12V laufen wollte für den Attiny85 einen 
Festspannungsregler 5Volt nehmen
so einen TS7805 oder einen noch kleineren in TO92 Gehäuse am Ausgang PB0 
Wiederstand 330Ohm an basis NPN Transistor und collector an 12V, emitter 
auf die Spule von eine 12V Printrelais.
Dann noch einen kleinen DIL-Schalter oder nur eine Drahtbrücke zum 
umschalten an PB3 Stromstoßschalter - Stromstoßschalter mit 
Rückfallverzögerung.

von Bastian W. (jackfrost)


Lesenswert?

Mit was flashed du den Tiny wenn ein Hex aus nem C Programm nicht immer 
geht ?

Freilaufdiode nicht vergessen.

Gruß JackFrost

von moijn (Gast)


Lesenswert?

Karl M. schrieb:
> wie schnell läuft der AVR t85, 1MHz, 8MHz oder mit 16MHz ?

Microlutz schrieb:
> Der Attiny85 hat 8MHz max, aber für 5min braucht man bestimmt ein
> Vorteiler.

Microlutz schrieb:
> so einen TS7805 oder einen noch kleineren in TO92 Gehäuse am Ausgang PB0
> Wiederstand 330Ohm an basis NPN Transistor und collector an 12V, emitter
> auf die Spule von eine 12V Printrelais.



Darf, soll oder muß man die "Experten" unter sich lassen?

von Walter S. (avatar)


Lesenswert?

Microlutz schrieb:
> Leider hat mein Programmer mit C immer mal ein paar Probleme

woher weiß dein Programmer dass die Daten von einem C-Compiler stammen?

von wendelsberg (Gast)


Lesenswert?

Falk B. schrieb:
> Ja, das geht sogar auf dem kleinsten Tiny13.

Habe ich sogar auf einem Tiny12 laufen, wer bietet weniger?

wendelsberg

von Max D. (max_d)


Lesenswert?

wendelsberg schrieb:
> Habe ich sogar auf einem Tiny12 laufen, wer bietet weniger?

Attiny 4?

von Peter D. (peda)


Lesenswert?

Hier mal ein Beispiel in C:

Beitrag "Wartezeiten effektiv (Scheduler)"

von Thomas E. (picalic)


Lesenswert?

wendelsberg schrieb:
> wer bietet weniger?

PIC10F100

(gleich kommen bestimmt wieder die Stimmen, die erklären, warum für 
diese Aufgabe ein 32-Bit ARM viel besser geeignet ist) ;)

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Eine ähnliche Funktionalität habe ich vor längerer Zeit für meine 
Regenfasspumpe programmiert. Ich glaube es war Assembler auf einem 
Attiny11?

Funktion: Das Regenfass steht im Garten und soll in der Trockenzeit aus 
dem unterirdischen Regenspeicher gefüllt werden. Dort ist eine 
Tauchpumpe vorhanden. Es kam immer wieder vor, das ich die Pumpe nach 
dem Einschalten vergaß und das Fass überlief bis der Erdtank fast leer 
war.

Also Zeitbegrenzung mit Komfort.
Programm funktioniert so:
1) Pumpe aus
2) kurzer Tastendruck: Pumpe läuft für 12 Minuten (dann ist das Fass 
voll)
3) durch kurzen Tastendruck kann die Pumpe jederzeit ausgeschaltet 
werden wenn z.B. das Fass vorher nicht ganz leer war
4) während des Zeitablaufes blitzt eine LED
5) aus 1) oder 2) kann durch einen langen Tastendruck auf Dauerbetrieb 
geschaltet werden, die LED leuchtet durchgehend. Jetzt kann die Pumpe 
auch zum Wässern von Bäumen und Hecken benutzt werden.
6) kurzer Tastendruck macht die Pumpe wieder aus.

Soll so ungefähr die Funktion sein?
Dann muß ich mal in alten Disketten nach dem Programm kramen.

von SeDa (Gast)


Lesenswert?

Gib mir mal eine Möglichkeit (eMail) dich zu kontaktieren, dann könne 
wir gerne alles aus machen.
Mein Angebot wäre ein ASM Programm mit ausführlicher Kommentierung.

von Uwe (de0508)


Angehängte Dateien:

Lesenswert?

Guten Mittag,

ich habe mich auch an eine eigenständige Realisierung gemacht.

Das Programm ist für 1MHz CPU-Clock ausgelegt, es arbeitet nicht 
blockierend und verwendet keine Delay o.ä.

Der Taster an PortB.4 wird entprellt (peda Routine) und über den 
Tasterevent wird entweder:

a) portb.0 auf High gesetzt, der Ausgangszustand von portb.3 gewechselt 
und der 5 min Delaytimer gestartet.

oder

b) portb.0 auf Low gesetzt, der Ausgangszustand von portb.3 gewechselt 
und
der 5 min Delaytimer gestoppt.

Ist der Delaytimer abgelaufen, also die verstrichene Zeit >= 5min,
dann wird portb.0 auf Low gesetzt und der Delaytimer gestoppt.

Das Programm belegt 538 Byte im Flashspeicher, es benutzt Timer1 als
Zeitbasis und die statische Ram-Belegung liegt bei 13 Byte.

Hier noch ein Report des Compilers, bzw. der IDE.

: Bearbeitet durch User
von Route_66 H. (route_66)


Lesenswert?

Habs gefunden:
0x4f Worte also 158 Bytes Flash
8 RAM-Zellen
1 Stack Adresse fuer Interrupt zur Tastenenprellung und Zeitablauf

Na Moby, ist doch ein tolles beispiel fuer Assembler <-> C

von Microlutz (Gast)


Lesenswert?

Sorry bin nicht eher zum schreiben gekommen,zum Angebot vom Uwe S. ich 
bin erst mal begeistert das du so schnell das Programm zusammenbekommen 
hast.
Hab da aber noch eine Frage es klingt mir so als könnte man nur vom PB3 
den 5min Timer auschalten? Also von PB4 muss sich der Timer auch vor 
ablauf der
5min zurücksetzen lassen mit wiederholen drücken des Tasters. Der 
Unterschied den ich mit PB3 erreichen wollte ist nur das dann die LED 
nach einschalten nicht mehr ausgeht außer ich drücke wieder PB4 und das 
Umschalten an PB3 aktiviert nur den 5min Timer.

Wenn das so klappt sende mir das Programm an offroader78@hotmail.de mit 
deiner IBAN. oder PAYPAL-konto was dir lieber ist ich werde das Programm 
prüfen und wenns funktioniert bekommst du dein Geld überwiesen.

Ein paar Infos was ich voreinstellen muss wäre gut.

von Microlutz (Gast)


Lesenswert?

Ach so, was ich noch Fragen wollte, kann ich den Zeitwert mit ein paar 
einfachen Änderungen in Programm erhöhen falls mal die 5min nicht 
ausreichen sollten?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Du solltest Dich mal anmelden, dann kannst Du Deine direkten Fragen per 
PN an den User Deiner Wahl stellen.

von Karl M. (Gast)


Lesenswert?

Guten Morgen,

erst soll es nur ein lauffähiges Programm als Hex- oder BIN-Datei sein 
und dafür wird ein Trinkgeld vereinbart.

Und nun noch der gesamte Quellcode - für lau ?

Keiner weis bisher, wie das Programm genau arbeiten soll, da sich die 
Anforderung scheinbar ändert, oder ungenau ist.

Hier sollte man sich mit dem Entwickler direkt austauschen, nur wenn 
ALLE Fragen genau beantwortet sind, dann verhält sich ein Programm auch 
genau so, wie man es vorher definiert hatte.

Gibt es Interpretationsspielraum, dann kann ein Programm sich in diesen 
Bereichen anders Verhalten, d.h. eine andere Logik zeigen.

von Max D. (max_d)


Lesenswert?

Schick ihm ne hex mit Wartezeit 10-20 Sekunden oder so und wenn der Rest 
passt dann gibt's gegen Geld den Code für die gewünschte Zeit gegen Geld 
oder so. (nur ne Idee)

von Uwe (de0508)


Lesenswert?

Hallo Lutz,

ich habe die Problembeschreibung wie folgt interpretiert:
1
'---------------------------------------
2
'                    Attiny85 @1MHz
3
'                     +----------+
4
'              Reset -|    ##    |- Vcc
5
'  Mode Switch - PB3 -|          |- PB2 - ADC1
6
' OnOff Switch - PB4 -|          |- PB1 - #Mode Output
7
'                Gnd -|          |- PB0 - Timed Output
8
'                     +----------+
9
'---------------------------------------

Das Programm reagiert nun auf eine Spannung an ADC1 mit Spannungen 
zwischen Vcc -- Gnd.
Über 10 Sekunden Schritte lässt sich nun die Abschaltverzögerung 
einstellen.

Dabei bedeutet:
# N=0 (Nullwert) keine Abschaltverzögerung,
# N=1 10 Sekunden,
# N=x x*10 Sekunden und
# N=127 (Endwert) 21 Minuten + 10 Sekunden

Es gibt zwei Taster:
Der "Mode Switch" an PB3 und
der "OnOff Switch" an PB4.

Über den Taster "Mode Switch" kann die Abschaltverzögerung aus- und 
wieder eingeschaltet werden, dabei signalisiert die LED (#Mode Output) 
an PB1 den Zustand des Programms.

LED (#Mode Output) = Low  - Abschaltverzögerung ein.
LED (#Mode Output) = High - Abschaltverzögerung aus.
Hier kann man eine LED mit 1k Vorwiderstand nach Vcc anschalten.

Über den "OnOff Switch" an PB4 kann man nun im Wechsel den Ausgang 
(Timed Output) Ein- = High oder Ausschalten = Low.

Bei einem Moduswechsel über "Mode Switch" bleibt der Zustand des 
Ausgangs (Timed Output) erhalten und man kann ihn immer mit betätigen 
von "OnOff Switch" wechseln.

Die Abschaltverzögerung wird natürlich nur im Modus "Abschaltverzögerung 
ein" aktiviert.

: Bearbeitet durch User
von Microlutz (Gast)


Lesenswert?

Ok, das ist schon so wie ich mir das vorgestellt habe. Wie machen wir 
nun den Austausch?

von Uwe (de0508)


Lesenswert?

Schaue in deine Email und beantworte dort bitte meine Fragen.

Bitte nicht mehr hier im Forum.

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
Noch kein Account? Hier anmelden.