ATtiny 13 Zeiteinstellung bascom

#3440352
Lesenswert?

Ziemlich komischer Code.

Für was brauchst du ein entprellen, wenn ein Tastendruck eh eine 1 
Stündige arbeit verrichtet?

Einfach:

If taste gedrückt
set portb.1 = 1
wait 3600
set portb.1 = 0
goto start


Die befehle, und wie alles zusammen gehört, findest du sicherlich selbst 
raus.
#3440364
Lesenswert?

Was denn? :D
Hab ich was falsch verstanden?

Er möchte, nachdem er eine Taste gedrückt hat, das ein ausgang für eine 
Stunde auf High geschalten wird?

Dann ist das doch richtig? Ausser er möchte dabei noch was anderes 
machen. Aber das hat er ja nicht gesagt.

Edit:
Meinst du mich?
#3440371
Lesenswert?

wenn ein DEBOUNCE
1
  Config Debounce = 30                                      'Zeit der Kontaktentprellung in ms
30 Millisekunden dauert, wie lange dauern dann
1
For B = 1 To 2000
2
 ....
3
 Debounce Pinb.0 , 0 , Main                                  'Wenn Taste 
4
...
5
NEXT B

2000 Stück davon?

Wenn einmal abarbeiten dieser 2000 Stück x Zeiteinheiten benötigt, wie 
lange dauert es dann, bis
1
For A = 1 To 2000                                           'Zeitschleife 
2
...
3
If A = 100 Then Goto Main                                   ''Main' wenn A 
4
...
5
Next A

100 Stück dieser 2000-er Einheiten abgearbeitet sind?
#3440409
Lesenswert?

Dann mach:

start:

do
If taster gedrückt goto tastergedrückt
loop

tastergedrückt:
set portb.1 = 1


For A = 1 To 7200
waitms 500
if taster gedrückt goto stop
NEXT A

stop:

set portb.1 = 0

goto start

END

tadaa...
Musst halt, wenn du stoppen willst, den Taster dann eventuell 500ms 
gedrückt halten. Aber is ja auch ned schlimm.
OP #3440467
Lesenswert?

Daniel J. schrieb:
> start:
>
> do
> If taster gedrückt goto tastergedrückt
> loop...........

meinst du so???


$regfile = "attiny13.dat"                                   'verwendeter 
Prozessor
$crystal = 1200000                                          'Definition 
des Takt
$hwstack = 15 
'Reservierung im SRAM
$swstack = 15
$framesize = 15

Config Portb.0 = Output                                     ''Buzzer
Config Pinb.1 = Input

Dim A As Integer

start:

do
If Pinb.1 = 0 Then Goto Tastergedrückt
loop

tastergedrückt:
Portb.1 = 1


For A = 1 To 6200
Waitms 500


If Pinb.1 = 0 Then Goto Stopp
Next A


Stopp:

Portb.1 = 0

goto start

END
#3440480
Lesenswert?

Ja genau.

Nur anstelle von

tastergedrückt:
Portb.1 = 1

musst du Portb.0 = 0 da das ja der Output ist.
Bei "stopp" dann auch portb.0

und

For A = 1 To 6200

wird zu

For A = 1 To 7200

Da jede schleife circa 500ms dauert und eine Stunde 3600 Sekunden hat. 
Also pro sekunde 2 Schleifen = 7200.

Ausserdem fehlt noch der Pullup
Vor Start:
kommt ein "Portb.1 = 1"
der ist dafür da, dass wenn der Taster nicht gedrückt ist, dieser 
eingang dann immer eine "1" hat.

Da jede schleife circa 500ms dauert und eine Stunde 3600 Sekunden hat. 
Also pro sekunde 2 Schleifen = 7200.

So hätte ich das gemacht. Andere würde eventuell mit dem Timer arbeiten 
usw. Aber so funktioniert das auch. Natürlich nur wenn der Controller 
nichts anderes mehr innerhalb der Stunde mache muss.
#3440482
Lesenswert?

So hier die eigentlich fertige Datei.

Habe noch ein wenig verändert, kannst dirs ja ankucken. Sollte 
eigentlich jetzt das machen was du willst. Genau eine Stunde wirds damit 
zwar nicht gehen, dafür benötigst du sicherlich einen externen Quarz 
usw, aber sollte annähernd ne Stunde sein.
Angehängte Dateien:
#3440487
Lesenswert?

Daniel J. schrieb:
> Andere würde eventuell mit dem Timer arbeiten

Ja sicher doch. Obwohl der interne RC-Oszillator des Tiny13(A) ganz 
schönen Exemplarstreuungen unterliegt, was ihn für genaues Timing recht 
unbrauchbar macht. Der "Auftraggeber" hatte ganz schön damit zu tun, das 
Programm auf mehrere Exemplare abzugleichen. Der Feinabgleich erfolgte 
aus Gründen der Bequemlichkeit mit der Konstante "Stusek".

Das Programm im Anhang ist zwar für einen etwas anderen Zweck, zeigt 
aber, wie man an die Sache herangehen könnte. Es schaltet einstellbare 
Tage und Stunden nach dem Aktivieren einen Verbraucher für eine 
einstellbare Anzahl Stunden ein und geht nach dem Ausschalten des 
Verbrauchers in den Tiefschlaf.

...
Angehängte Dateien:
OP #3440549
Lesenswert?

Daniel J. schrieb:
> Genau eine Stunde wirds damit
> zwar nicht gehen, dafür benötigst du sicherlich einen externen Quarz

Danke Daniel!!
Hast da zufällig was im Angebot? :)
Ein Timer wäre schon recht,da das schon ziemlich genau und zuverlässig 
sein sollte.

Hannes Lux schrieb:
> Ja sicher doch. Obwohl der interne RC-Oszillator des Tiny13(A) ganz
> sch....
Danke auch an Hannes!!
Das hab ich schon mal wo gesehen und auch getestet.Hab bis heute keine 
Anwendung dafür gefunden.
#3440665
Lesenswert?

Tommy Tomatronic schrieb:
> Daniel J. schrieb:
>> Genau eine Stunde wirds damit
>> zwar nicht gehen, dafür benötigst du sicherlich einen externen Quarz
>
> Danke Daniel!!
> Hast da zufällig was im Angebot? :)

Der Tiny13 und Tiny13A ist nicht für Betrieb mit externem Quarz 
geeignet. Neben den Varianten des internen RC-Oszillators gibt es nur 
die Möglichkeit, mit einem externen Takt zu arbeiten. Wenn dies ein 
Quarztakt sein soll, dann ist ein externer Quarzgenerator notwendig. Ein 
Quarz alleine, wie bei anderen AVRs üblich, reicht dazu nicht. Siehe 
Datenblatt, Kapitel 6. "System Clock and Clock Options".

...
Gast #3441005
Lesenswert?

kopfkratz
Man könnte auch einen Tiny85 statt des Tiny13 nehmen und hat mehr Timer 
und weniger Abgleichsprobleme ...
Es fehlen halt wieder die notwendigen Daten, wie genau muß die Stunde 
sein, was soll geschaltet werden usw. usf.
Mit Quarzoszillator wird's genauso "teuer" wie mit Tiny85 nur das man 
dann noch mehr Platz braucht ...
Gast #3441160
Lesenswert?

Hannes Lux schrieb:
> kopfkratzer schrieb:
>> Mit Quarzoszillator wird's genauso "teuer" wie mit Tiny85 nur das man
>> dann noch mehr Platz braucht ...
>
> Eher noch teurer...
> Allerdings sollte man bedenken, dass der Quarz dann wieder zwei der 5
> I/O-Pins des Tiny25/85 blockiert.
>
> ...

Nein ist ja ein Oszillator ;-)
Und ich meinte Tiny13+Oszillator oder abgeglichener Tiny85 der geht 
recht genau im vergleich zum Tiny13.
#3441292
Lesenswert?

Also du kannst mein Code verwenden.
Willst du nun einen schon vorhandenen Attiny verwenden, oder bist du da 
noch flexibel?
Der Attiny85 wäre z.B. mit einem Quarz zu betreiben.

Dazu einfach den Attiny so fusen, das er mit einem externen Quarz 
arbeitet und in Bascom angeben wie schnell er ist. Dann bleibt der Code 
unverändert ;)
OP #3441375
Lesenswert?

Ich hätte noch einen ATtiny 45 zur Hand. Auch einige Quarz hab ich. Ich 
hätte da schon gerne einen Timer drin. Die reaktionszeit vom Taster soll 
ja auch gleich bleiben.
In der Stunde kann er ruig einige Sekunden falsch laufen da brauch ich 
keinen Quarz, aber es soll immer fast gleich laufen.
Ich hab nur einen eingang und einen ausgang.
Gast #3441431
Lesenswert?

Tommy Tomatronic schrieb:
> Ich hätte noch einen ATtiny 45 zur Hand. Auch einige Quarz hab
> ich. Ich
> hätte da schon gerne einen Timer drin. Die reaktionszeit vom Taster soll
> ja auch gleich bleiben.
> In der Stunde kann er ruig einige Sekunden falsch laufen da brauch ich
> keinen Quarz, aber es soll immer fast gleich laufen.
> Ich hab nur einen eingang und einen ausgang.

Dann nimm den Tiny45 mit einem passenden Quarz und Du hast es auf die 
Sekunde genau.
Oder Du schaust mal wie gut Du in BASCOM die interne Kalibrierung 
hinbekommst.
Wenn es in der Stunde auf 10 Sekunden nicht ankommt und nur der Taster 
korrekt entprellt werden soll reicht das aus.

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