mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 24h Schalter mit Attiny 12


Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möchte folg. realisieren:
Mit einem Attiny12 der über einen Transistor ein Relai ansteuert das wie 
folgt geschehen soll:
Spannung anlegen, Port B1 gibt für 10 sec High Pegel, dann 24h nix tun, 
dann Port B1 wieder für 10sec auf High Pegel. Hier mein Code in Bascom, 
leider geht das irgendwie nicht. So wie es aussieht bleibt der Prozess 
am Wait 86400 hängen. Kann das anders gelöst werden?

$regfile = "attiny12.dat"
$crystal = 1200000
Config Portb.1 = Output
$noramclear
$swstack = 0
$framesize = 0

Do
Portb.1 = 1      "Port B1 auf high Pegel"
Waitms 10000     "10sec warten"
Portb.1 = 0      "Port B1 wieder auf Low Pegel"
Wait 86400       "86400 sec (24 Stunden) warten"
Loop
End

Aber warum geht das so nicht ??? Änder ich die 86400 in waitms wird die 
Zahl nicht mehr angenommen.
Wer hat eine Idee?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Andreas Lübbers (andreasluebbers)

>Aber warum geht das so nicht ??? Änder ich die 86400 in waitms wird die
>Zahl nicht mehr angenommen.

Wahrscheinlich weil der Parameter von Waitms auf 255 (8-Bit) oder 65536 
(16-Bit) begrenzt ist.

>Wer hat eine Idee?

Mit wait wird das sowieso nix. Du brauchst 1. einen Quarz am AVR, 
zweitens macht man das über einen Timer, wenn es halbwegs genau sein so.
Das geht auch in BASCOM.

MFG
Falk

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie würde dann ein einfacher Code aussehen? Kenn mich mit dieser 
Timer0 Timer1 Geschichte bisher nocht nicht so wirklich aus. Genau muss 
es wirklich nicht sein. Kann in 10 Tagen ruhig eine Abweichung von mehr 
als 10Minuten haben, kein Problem.
Allgemein der Befehl "wait" ist ohne Funktion, obwohl der Compiler nicht 
meckert!

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jemand ne schnelle und einfache Lösung? Außer ne Zeitschaltuhr vom 
Baumarkt !?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:
> Und wie würde dann ein einfacher Code aussehen? Kenn mich mit dieser
> Timer0 Timer1 Geschichte bisher nocht nicht so wirklich aus.

Das kann man auch lernen

> Allgemein der Befehl "wait" ist ohne Funktion, obwohl der Compiler nicht
> meckert!

Glaub ich nicht.
Wartet denn
Wait 10
nicht ca. 10 Sekunden?


Hinweis: Anstelle von 60 Minuten, also 3600 Sekunden, kann man auch 10 
mal 360 Sekunden oder 100 mal 36 Sekunden oder 20 mal 180 Sekunden oder 
.... warten.
Der Unterschied: die Zahlen, die man Wait vorsetzt, sind kleiner und die 
FOR-Schleife ist schon erfunden.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Komischer Weise ist es aber so. Ich kann ja z.B. auch wait 1 für beide 
Zeiten eingeben und ich hätte ein Blinklicht, dem ist aber nicht so.
Woran kann das liegen?  Kann der Tiny12 keine Wait Befehle? Waitms geht 
tadellos.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:
> Komischer Weise ist es aber so. Ich kann ja z.B. auch wait 1 für beide
> Zeiten eingeben und ich hätte ein Blinklicht, dem ist aber nicht so.

Interessant.

> Woran kann das liegen?  Kann der Tiny12 keine Wait Befehle?

Das macht sowieso nicht der Tiny so wie du dir das vorstellst.

> Waitms geht
> tadellos.

Na dann nimm halt das.

Wartet man 60 mal 1000 Millisekunden, hat man auch 1 Minute gewartet.
das wiederrum 60 mal -> man hat eine Stunde gewartet.
Und von da sollte der Schritt zu 24 Stunden nicht mehr schwer sein :-)

Wie gesagt: die FOR-Schleife ist schon erfunden. Deinem Tiny ist es 
egal, was er tun soll, und wenn es nur stupide ein paar Variable in ein 
paar ineinander geschachtelten Schleifen hochzählen ist.


Wenn das für dich programmtechnisch ein Problem darstellt, dann solltest 
du wirklich mit der Baumarkt-Lösung liebäugeln.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Schleife macht mir immer noch Probleme! Wenn nichts am TV läuft und 
jemand Lust hat, immer her mit dem Quellcode.

Autor: snowfly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for i=0 to 60
 for j=0 to 1000
 [...]
 next
next

Autor: snowfly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Tiny12 und Bascom hab ich auch schonmal gebastelt....
und aufgegeben.

wegen dem fehlenden RAM funktioniert darauf so einiges nicht.
Tip: bestell dir nen anderen µC mit dem Tiny12 macht das keinen Spass.
also ATMega88 oder 48 und wenns ein 8Beiner sein muss dan halt Tiny45 
oder 25

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, so ein Mist.

"6.45 $TINY Action
Instruct the compiler to generate initialize code without setting up the 
stacks.

Syntax $TINY

Remarks
The tiny11 for example is a powerful chip. It only does not have SRAM. 
BASCOM
depends on SRAM for the hardware stack and software stack.
When you like to program in ASM you can use BASCOM with the $TINY 
directive.
Some BASCOM statements will also already work but the biggest part will 
not work.

A future version will support a subset of the BASCOM statements and 
function to be used with the chips without SRAM. Note that the generated 
code is not yet optimized for the tiny parts. Some used ASM statements 
for example will not work because the chip does not support it."

Ergo. Forget about it mit BASCOM.

Autor: El Jefe (bastihh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:

> Ergo. Forget about it mit BASCOM.


WITH lieber Falk, with nicht mit ;)

Immer diese verdenglischung ;)

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nimm dir ein tiny45 und mach einen quartz dran, denn der interne
osc. ist nicht wirklich genau.
programmier dir dann eine schleife von zb. 10 minuten und ruf
diese entsprechen oft auf.

das bekommst du schon hin, ist ein bisschen tüftelei aber absolut
kein problem mit bascom

und wenns hakt melde dich

vlg
Charly

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oder doch?

http://www.mitchsoft.de/Tips/BascomIDE/ATtiny_ohne...

Siehe Anhang, etwas fummelig, sollte aber gehen. Zum Testen ist der 24h 
Stunden Zyklus verkürzt, für die echten 24h muss man das auskommentierte 
reinnehmen und den zeiten Block auskommentieren.

MfG
Falk

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke du meinst den "zweiten Block"!!! Von 'Schnellstart bis End If`
Leider Startet das System nicht mit den 10sec. High-Pegel. Warum nicht 
??
Ist Attiny12 und Bascom wirklich so ein scheiß?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich fehlt die Initialisierung

Cnt3 = 0

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort, werde gleich mal testen ob dann alles soweit 
startet.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Prescaler von 1024 und 256 ist das überhaupt möglich? Habe Cnt03=0 
gesetzt, PortB.1 geht dann auch auf High Pegel. Aber länger als 
erwartet. Soweit im Datenblatt steht, geht der Prescaler doch nur bis 
max. 1024. oder sehe ich das falsch?
Dann noch eine Frage zum cnto1-cnt03. Im Datenblatt der Attiny12 heißt 
es cs00-cs02. Oder spielt das hier keine Rolle?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$crystal = 1200000


Das wird nicht stimmen. Der Tiny wird nicht auf 1.2Mhz laufen.
Sieh dir im Datenblatt die OSCAL Einstellung an und dreh die mal auf 
(aus dem Gedächtnis) Maximum.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Tiny wird nicht auf 1.2Mhz laufen.
Doch, Karl Heinz, tut er.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> Der Tiny wird nicht auf 1.2Mhz laufen.
> Doch, Karl Heinz, tut er.

Bist du sicher?
Mein erster AVR war auch ein Tiny12. Wenn mich mein Gedächtnis nicht 
täuscht, machte der so um die 700 bis 800kHz. Erst nachdem ich den OSCAL 
hochgedreht hatte, kam ich auf über 1Mhz.
Ich rede nicht von den restlichen Fuses sondern nur vom OSCAL, die 
direkt an den RC-Oszillator geht.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bist du sicher?
Nur was das Datenblatt mir sagt, ich würde keine Abweichung um -42% 
erwarten, 10% vielleicht.

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wies beim tiny12 ist weis ich nicht genau,
aber die groesseren haben ein osccal byte
im chip ab werk gespeichert, das muss meines
wissens ausgelesen werden und ins oscal (oder so)
beim programmstart reingeschrieben werden
ohne das kann es schon sein das er wie Karl-Heinz
schreibt mit 700-800khz rennt
i verwende zb. mega8 mit oscal am anschlag rennen
die mit  ~14.5 Mhz (statt 8Mhz)

vlg
Charly

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> Bist du sicher?
> Nur was das Datenblatt mir sagt, ich würde keine Abweichung um -42%
> erwarten, 10% vielleicht.

Vom 12-er ist das Datenblatt bei Atmel nicht mehr online. Kann daher 
nicht nachsehen. Aber das Teil ist uralt!

Nehmen wir mal von 13-er die OSCCAL Einstellung her
OSCCAL Value      Typical Lowest Frequency             Typical Highest Frequency
               with Respect to Nominal Frequency    with Respect to Nominal Frequency

   0x00                  50%                                100%
   0x3F                  75%                                150%
   0x7F                 100%                                200%

also, das sind schon wirklich die Schätzprügel, die du da hast. 10% ist 
bei denen hochpräzise :-)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Datenblatt:

'In ATtiny12, the calibrated internal oscillator provides a fixed 1.2 
MHz (nominal) clock at 5V and 25°C.
....

At 5V and 25oC, the pre-programmed calibration byte gives a frequency 
within
± 1% of the nominal frequency.'

MfG Spess

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber länger als erwartet.
Du hast 262143 Zyklen in der Simulation zwischen den ISR Aufrufen, das 
entspricht den erwarteten 4.577 Hz. Wenn die Zeit nicht passt, wird dann 
wohl der interne RC um dieses Maß falsch laufen.

Ich würd' übrigens noch Cnt3 zur Sicherheit initialisieren.

> Vom 12-er ist das Datenblatt bei Atmel nicht mehr online. Kann daher
> nicht nachsehen.
Gerade von Atmel runtergeladen.
http://www.atmel.com/dyn/resources/prod_documents/...

> Aber das Teil ist uralt!
Yep, mit 3 Level Stack :D

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:

> 'In ATtiny12, the calibrated internal oscillator provides a fixed 1.2
> MHz (nominal) clock at 5V and 25°C.
> ....
>
> At 5V and 25oC, the pre-programmed calibration byte gives a frequency
> within
> ± 1% of the nominal frequency.'

:-)
Da gibt es eine wunderschöne Falle.
Hannes! Wo bist du wenn man dich braucht? Ich hab doch das auch nicht 
mehr alles im Kopf.

Du must OSCCAL selber beschreiben. Der dazu notwendige Wert steht im 
Flash(oder EEPROM?) und zwar im letzten Byte. Hannes seine Programmer 
berücksichtigen das, lesen das Byte aus und mergen es in das zu 
programmierende Programm ein. Allerdings lesen seine Tiny-Programme dann 
auch immer diesen Wert aus dem Flash und beschreiben damit den OSCCAL.
Wenn man dann mal eine Programmiersoftware benutzt, die das nicht macht 
... dann hat man die Kalibrierung verloren.

Ich war damals jung und brauchte das Geld. Kurz und gut: Mein Tiny war 
ruckzuck auf 700-800kHz herunten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> spess53 schrieb:
>
>> 'In ATtiny12, the calibrated internal oscillator provides a fixed 1.2
>> MHz (nominal) clock at 5V and 25°C.
>> ....
>>
>> At 5V and 25oC, the pre-programmed calibration byte gives a frequency
>> within
>> ± 1% of the nominal frequency.'
>
> :-)
> Da gibt es eine wunderschöne Falle.
> Hannes! Wo bist du wenn man dich braucht? Ich hab doch das auch nicht
> mehr alles im Kopf.
>
> Du must OSCCAL selber beschreiben. Der dazu notwendige Wert steht im
> Flash(oder EEPROM?) und zwar im letzten Byte. Hannes seine Programmer
> berücksichtigen das, lesen das Byte aus und mergen es in das zu
> programmierende Programm ein. Allerdings lesen seine Tiny-Programme dann
> auch immer diesen Wert aus dem Flash und beschreiben damit den OSCCAL.
> Wenn man dann mal eine Programmiersoftware benutzt, die das nicht macht
> ... dann hat man die Kalibrierung verloren.
>
> Ich war damals jung und brauchte das Geld. Kurz und gut: Mein Tiny war
> ruckzuck auf 700-800kHz herunten.

Nochmal im Datenblatt nachgelesen (Danke dafür, ich hab bei Atmel nur 
mehr das Errata zum 12-er gefunden. Hmm)
Atmel schreibt den richtigen OSCCAL Wert ins Signature Byte. Man muss 
selber dafür sorgen, dass der auch im OSCCAL Register landet!
Weiß das wer: Macht BASCOM das?

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso iss das datenblatt nimi online ?

guggst du da :

http://www.atmel.com/atmel/acrobat/doc1006.pdf

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Charly B. schrieb:
> wieso iss das datenblatt nimi online ?

Ich weiß nicht.
Ich hab wahrscheinlich mit dem Weißen vom Auge geschaut.

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jaja, der wald & die baeume  hihihi


aber i weiss nicht warum fred son stress macht statt an das teil
ein Quarz f. 18 Cent dranzuhaengen, selbst wenn er 100 st.
davon baut sind das 18€ kein preis im vergleich zu der 'energie'
die er bis jetzt wg. des RC osc. reingesteckt hat.........
und wenn du es genau brauchst kommste am quarz sowieso
nicht vorbei

vielleicht sollte man mal darueber nachdenken, oder ?

vlg
Charly

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Weiß das wer: Macht BASCOM das?
Meines Wissens gibt's da nix unter Bascom.

> hab bei Atmel nur mehr das Errata zum 12-er gefunden.
Ein Google nach "Atmel <Prozessortyp>" bringt meist als ersten Link 
genau das Gewünschte.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
> Du hast 262143 Zyklen in der Simulation zwischen den ISR Aufrufen, das
> entspricht den erwarteten 4.577 Hz. Wenn die Zeit nicht passt, wird dann
> wohl der interne RC um dieses Maß falsch laufen.

In der Simulation lief das Programm? Wie soll das mit dem Prescaler denn 
funktionieren? Wie gesagt, soll beim starten Portb.1 für 10sec auf high 
legen, dann 24h ruhen und dann wieder für 10sec auf high....

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> Weiß das wer: Macht BASCOM das?
> Meines Wissens gibt's da nix unter Bascom.
>
>> hab bei Atmel nur mehr das Errata zum 12-er gefunden.
> Ein Google nach "Atmel <Prozessortyp>" bringt meist als ersten Link
> genau das Gewünschte.

Da bin ich dann zu kompliziert :-)
Ich hangle mich bei Atmel zu
http://www.atmel.com/dyn/products/datasheets.asp?f...
durch.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:

> In der Simulation lief das Programm? Wie soll das mit dem Prescaler denn
> funktionieren?

So wie immer

Der Timer läuft mit

  Systemtakt / Prescaler

Systemtakt ist bei dir 1.2Mhz
Prescaler ist 1024

Also wird der Timer mit einer Frequenz von 1171.875 Hz erhöht.

Der Timer zählt jeweils von 0 bis 255, macht also 256 Zählschritte. 
Danach kommt ein Overflow.

1171.875 / 256 = 4.57 zerquetschte Hz

Mit dieser Frequenz kommen also die Overflows und damit die Aufrufe der 
zugehörigen ISR daher. 4.58 Hz heißt, dass du in 1 Sekunde 4.5 Overflows 
kriegst. Du willst 10 Sekunden, also zählt man einfach in der ISR mit. 
Nach dem 46. Overflow sind daher ~10Sekunden vergangen.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt versteh ich die Logic,....und wie soll der Timer dabei auf 24h 
kommen? Macht ja einmal die 46 Perioden, dann die 33 und 150. Sind das 
insgesamt 86400 sec (24h). Oder muß ich da im Hintergrund auch immer 
bedenken das der Overflow erst nach 256 durchläufen kommt?

Karl heinz Buchegger schrieb:
> Mit dieser Frequenz kommen also die Overflows und damit die Aufrufe der
> zugehörigen ISR daher. 4.58 Hz heißt, dass du in 1 Sekunde 4.5 Overflows
> kriegst. Du willst 10 Sekunden, also zählt man einfach in der ISR mit.
> Nach dem 46. Overflow sind daher ~10Sekunden vergangen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:
> Jetzt versteh ich die Logic,....und wie soll der Timer dabei auf 24h
> kommen?

Falk hat ja auch noch weitere Zähler mitlaufen.
Nur dann wenn die alle 0 sind, wird der Ausgang 1
ansonsten ist er 0.

Und dann zählt er mit den anderen Zählern weiter.

Nach 6 Stück 10 Sekunden Perioden ist man bei 1 Minute, die werden 
wieder weitergezählt, etc ....
Die genauen Werte musst du dir aus dem Programm auslesen, aber im Grunde 
passiert nichts anderes, als das die ISR 10 Sekundenintervalle abzählt, 
bis 24h vergangen sind. Ist doch immer wieder dasselbe Prinzip.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der Simulation lief das Programm? Wie soll das mit dem Prescaler denn
> funktionieren?
AVR Studio simuliert Timer und Interrupts von Haus aus, der Bascom 
Simulator besitzt die Option Sim Timers. Wenn die simuliert werden, 
dann natürlich mit dem eingestellten Prescaler. Wenn man dann einen 
Haltepunkt an den Beginn der ISR setzt, kann man die vergangenen Zyklen 
sehen.

Beim ersten Erreichen der 46 wird der Portpin gesetzt, nach weiteren 10 
Sekunden, beim nächsten Erreichen der 46 wieder gelöscht.

Das hier für den 24 Stunden Code sieht mir unbrauchbar aus:
      'If Cnt2 = 0 Then
      '   Cnt3 = Cnt3 + 1
      '   If Cnt3 = 33 And Cnt2 = 150 Then 
Der Bedingungsblock wird nur durchlaufen, wenn Cnt2 = 0 ist, eine 
Prüfung auf 150 kann dann nie zutreffen.

Das erste If Cnt1 = 0 ... hättest Du Dir hingegen sparen können, denn 
unmittelbar vorher setzt Du es ja auf 0. Was für einen anderen Wert 
außer 0 soll es denn dann haben ? :-)
     Cnt1 = 0
      If Cnt1 = 0 And Cnt2 = 0 And Cnt3 = 0 Then

@Karl Heinz
> Da bin ich dann zu kompliziert :-)
Bei der Google Suche geht man immer dann ein, wenn man Begleitfiles zu 
einer Appnote sucht, da hilft dann nur durchhangeln.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
> Das hier für den 24 Stunden Code sieht mir unbrauchbar aus:      'If Cnt2 = 0 
Then
>
>       '   Cnt3 = Cnt3 + 1
>
>       '   If Cnt3 = 33 And Cnt2 = 150 Then Der Bedingungsblock wird nur 
durchlaufen, wenn Cnt2 = 0 ist, eine
> Prüfung auf 150 kann dann nie zutreffen.
>
> Das erste If Cnt1 = 0 ... hättest Du Dir hingegen sparen können, denn
> unmittelbar vorher setzt Du es ja auf 0. Was für einen anderen Wert
> außer 0 soll es denn dann haben ? :-)     Cnt1 = 0
>
>       If Cnt1 = 0 And Cnt2 = 0 And Cnt3 = 0 Then


Wie würde das nach Deiner Meinung denn richtig funktionieren. Möchte 
jetzt nicht hinter einem Quellcode herbetteln, aber wenn man einen 
funktionstüchtigen Code hat kann mir der Programmablauf erst richtig 
klar werden. Und da habe ich derzeit so meine Probleme.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:

> Wie würde das nach Deiner Meinung denn richtig funktionieren. Möchte
> jetzt nicht hinter einem Quellcode herbetteln, aber wenn man einen
> funktionstüchtigen Code hat kann mir der Programmablauf erst richtig
> klar werden.

Und gelernt hast du dabei gar nichts.

Denk selber nach. Ein bischen rechnen wirst du soch auch selber können.

> Und da habe ich derzeit so meine Probleme.

Eben. Und darum solltest du das selber machen.

Wieviele 10 Sekunden Intervalle gibt es in 24 Stunden?
Und diese Anzahl musst du auf entsprechend viele Zählvariablen 
aufteilen, so dass keine weiter als bis 255 zählen muss.

Der Rest funktioniert wie bei einer Uhr
Nach 60 Sekunden ist 1 Minute vergangen. D.h. die Sekunden fangen wieder 
bei 0 an und die Minuten werden um 1 hochgezählt. Nach 60 Minuten ist 1 
Stunde vergangen, d.h. die Minuten werden wieder auf 0 gesetzt und die 
Stunden um 1 hoch. Nach 24 Stunden wird alles auf 0 gesetzt, das nächste 
24 Stunden INtervall beginnt (und der Ausgang wird für 10 Sekunden auf 1 
gesetzt).


Selber machen!
Nicht darauf warten, dass dir alles im Detail vorgekaut wird.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber wenn man einen funktionstüchtigen Code hat kann mir der
> Programmablauf erst richtig klar werden.
Na, wenn Du denn hast, dann wärst Du ja schon fertig :D

Der Block um Cnt2 ist schon noch ok, nur kann eben besagte Bedingung 
darin nie wahr werden. Also muss diese Bedingung aus diesem Block raus 
und dahinter.

Wobei ich auch mit Deiner Rechnung nicht ganz einverstanden bin, denn 
ein Tag hat 86400 Sekunden, alle 10 Sekunden ein Interrupt, sind 8640 
Aufrufe, Cnt2 braucht 256 Zyklen pro Durchlauf, das sind 33 Durchläufe 
für Cnt3 und ein Rest von 192 für Cnt2. Wobei's möglicherweise 
Erbsenzählen ist, solange der RC Oszillator nicht einigermaßen genau 
läuft.

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier nochmal die neue Version, sollte jetzt passen.

MFg
Falk

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Selber machen!
> Nicht darauf warten, dass dir alles im Detail vorgekaut wird.

Wie recht Du doch hast, fördern durch fordern!

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Hier nochmal die neue Version, sollte jetzt passen.

Läuft nicht in der Praxis, und keiner weiß warum !?

Enable Timer0
Enable Interrupts
Start Timer0

' Endlosschleife
Do
Loop

End

' Timer Interrupt 1.2MHz/1024/256 = 4,577Hz (=218,4ms)
Tim0_isr:
  Cnt1 = Cnt1 + 1
  If Cnt1 = 46 Then                                         ' DIV 46 
->1/10,04s
      Portb.1 = 1
      Else
      Portb.1 = 0
      End If
      Return

Selbst dieser int. allein läuft nicht!

Autor: MWS (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Welche Bascom Version ?

Flash das hex in den µC, toggelt die Led mit 4,6 Hz

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Version 1.11.9.8
Keine Ahnung warum nix läuft, Habe das Ganze schonmal Ersatzweise mit 
Mega8 eingespielt, genau das selbe Problem. Es läuft nicht !!!!!

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
> Flash das hex in den µC, toggelt die Led mit 4,6 Hz

LED Blinkt!
Meine Ausrüstung:
Pollin Evalutionboard, Bascom Versin 1.11.9.8, Eingespielt wird über 
PonyProg

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mega8 eingespielt, genau das selbe Problem.
Das wiederum sollte nicht sein.

Wieso frickelst Du eigentlich mit einem SRam-losen Baustein rum ? Lag 
der gerade da ? Nimm Tiny13, da hast Du die Scherereien nicht.

Gerade noch bemerkt, daß der Code versucht die ganzen Register zu 
sichern, da muss die ISR mit Nosave aufgerufen werden, also:
On Ovf0 Tim0_isr Nosave

Ich seh' mir noch den Code durch, damit das nicht noch weitere Probleme 
hat.

> Version 1.11.9.8

Mach ein Update, Ver 1.12.0.0 ist aktuell

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Fred vom Jupiter (andreasluebbers)

>Keine Ahnung warum nix läuft, Habe das Ganze schonmal Ersatzweise mit
>Mega8 eingespielt, genau das selbe Problem. Es läuft nicht !!!!!

Wie lange hast du denn gewartet? Selbst ein Schnelldurchlauf dauert 
knapp eine Minute . . .

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk, da gibt's ein Problem, in der ISR wird PUSH und POP verwendet, das 
sollte nicht klappen, denn der Tiny12 hat keinen richtigen Stack. Das 
ist ein Baustein, der für Bascom nix richtiges ist und für einen 
Anfänger schon zweimal nicht.

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mich für den Tiny12 entschieden weil die Platine so klein wie 
möglich gehalten werden muß. Aber wie gesagt, der Atmega8 läuft mit dem 
Quellcode ja auch nicht.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  MWS (Gast)

>sollte nicht klappen, denn der Tiny12 hat keinen richtigen Stack. Das
>ist ein Baustein, der für Bascom nix richtiges ist und für einen
>Anfänger schon zweimal nicht.

Wohl wahr. Na dann vergessen wir das Teil.

MFG
Falk

Autor: MWS (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Habe mich für den Tiny12 entschieden weil die Platine so klein wie
> möglich gehalten werden muß.

Untaugliches Kriterium, da der Tiny13 genauso groß ist, aber dafür SRam 
hat.

Ich bin auch dagegen fertigen Code zu liefern, aber diese zusätzlichen 
Hürden zu überwinden hast Du als Anfänger keine Chance.

Durch die Umstellung der Logik können die unbrauchbaren Opcodes 
vermieden werden. Das erzeugte .bin im Anhang, für den Fall, daß die 
Bascom Version zu alt ist.
$regfile = "attiny12.dat"
$crystal = 1200000
$noramclear
$swstack = 0
$framesize = 0

Dim Cnt1 As Iram Byte
Dim Cnt2 As Iram Byte
Dim Cnt3 As Iram Byte

Config Timer0 = Timer , Prescale = 1024
On Ovf0 Tim0_isr Nosave
Config Portb.1 = Output

Cnt1 = 0
Cnt2 = 0
Cnt3 = 0

Enable Timer0
Enable Interrupts
Start Timer0

' Endlosschleife
Do
Loop

End

' Timer Interrupt 1.2MHz/1024/256 = 4,577Hz (=218,4ms)
Tim0_isr:
  Cnt1 = Cnt1 + 1
  If Cnt1 = 46 Then                                         ' DIV 46 ->1/10,04s
      Cnt1 = 0

'      If Cnt2 = 0 And Cnt3 = 0 Then
      If Cnt2 <> 0 Then Goto Port_Clear
      If Cnt3 <> 0 Then Goto Port_Clear
         Portb.1 = 1
           Goto Port_End
      Port_Clear:
         Portb.1 = 0
      Port_End:

      Cnt2 = Cnt2 + 64
      If Cnt2 <> 0 Then Goto Ctr3_No_Inc
'      If Cnt2 = 0 Then
         Cnt3 = Cnt3 + 1
      Ctr3_No_Inc:

      If Cnt3 <> 1 Then Goto Ctrs_No_Reset
      If Cnt2 <> 0 Then Goto Ctrs_No_Reset
'      If Cnt3 = 1 And Cnt2 = 0 Then
         Cnt3 = 0
         Cnt2 = 0
      Ctrs_No_Reset:
  End If
Return

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@  Fred vom Jupiter (andreasluebbers)

>Habe mich für den Tiny12 entschieden weil die Platine so klein wie
>möglich gehalten werden muß.

Es gibt andere in SO8, tiny13 & Co.

> Aber wie gesagt, der Atmega8 läuft mit dem Quellcode ja auch nicht.

Logisch, weil da einige Sachen für den Tiny drin sind. Probier mal den 
Anhang.

MFG
Falk

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Falk, der erste Code der funktioniert. Im Atmega8. Werde jetzt mal 
schauen ob es auch im Tiny12 nach kleinen veränderungen geht. Oder ist 
das hoffungslos?
Würde der tiny13 einfacher sein, bzw. überhaupt die Voraussetzung mit 
sich bringen?

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
> Das erzeugte .bin im Anhang, für den Fall, daß die
> Bascom Version zu alt ist.

Damit läuft er aber immer noch nicht!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Fred vom Jupiter (andreasluebbers)

>Danke Falk, der erste Code der funktioniert. Im Atmega8.

Schön.

>Werde jetzt mal
>schauen ob es auch im Tiny12 nach kleinen veränderungen geht. Oder ist
>das hoffungslos?

Vergiss es.

>Würde der tiny13 einfacher sein, bzw. überhaupt die Voraussetzung mit
>sich bringen?

Ja, der wird normal von BASCOM unterstützt, weil er SRAM hat.

MFG
Falk

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Damit läuft er aber immer noch nicht!
Kein Mucks ? Nicht nach 10 Sekunden mal die Led an ?

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Antwort mehr ? Hmm, sowas, jetzt hab' ich's gerade noch mit 
Assembler zum Laufen gebracht :D
Waren noch Illegal Opcodes drin, Bascom ist ganz definitiv nix mehr für 
den Tiny12.

Dann mal viel Erfolg mit dem Tiny13 ;-)

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War noch unterwegs,....wenn Du es mit Tin12 hinbekommen hast dann nur 
herdamit! Würde ich gerne mal testen. Ist echt total panne,....wieviel 
Zeit man investieren muß für so eine "kleine" Schaltung.
Die Schaltung von Falk mit Atmega8 läuft,....wäre nur zu schön die 
Schlatung mit Attiny12 zum laufen zu bringen, gerade weil ich die 
Platine extra dafür fertig gemacht habe. (Würde mit Attiny13 zwar auch 
gehen, müßte ich aber wieder bestellen)
Also ich würde vor freude im Dreieck springen wenns damit funktioniert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred vom Jupiter schrieb:
> War noch unterwegs,....wenn Du es mit Tin12 hinbekommen hast dann nur
> herdamit! Würde ich gerne mal testen. Ist echt total panne,....wieviel
> Zeit man investieren muß für so eine "kleine" Schaltung.
> Die Schaltung von Falk mit Atmega8 läuft,....wäre nur zu schön die
> Schlatung mit Attiny12 zum laufen zu bringen, gerade weil ich die
> Platine extra dafür fertig gemacht habe. (Würde mit Attiny13 zwar auch
> gehen, müßte ich aber wieder bestellen)
> Also ich würde vor freude im Dreieck springen wenns damit funktioniert

Na ja.
Das Programm ist ja so kompliziert auch wieder nicht.
Hauptproblem ist, dass es ein Hochsprachencompiler mit dem Tiny12 mit 
seinen engen Limits und Weglassungen sehr schwer hat.
Da aber die Aufgabe an sich nicht schwer ist, wäre es ein perfekter 
Kandidat um auf einem Tiny12 in Assembler umgesetzt zu werden: Es muss 
nicht viel gerechnet werden und wenn beschränkt sich das auf 
Incrementieren und Vergleichen. All das ist in Assembler auch keine 
Hexerei.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Mein erster AVR war auch ein Tiny12. Wenn mich mein Gedächtnis nicht
> täuscht, machte der so um die 700 bis 800kHz. Erst nachdem ich den OSCAL
> hochgedreht hatte, kam ich auf über 1Mhz.

OSCCAL wird nicht automatisch geladen und steht damit nach einem Reset 
auf ganz langsam.
Du brauchst einen Programmer, der den Wert auslesen kann und dann mußt 
Du ihn händisch in Deinen Quellcode übernehmen.

Bei einem frischen ATtiny12 steht er aber auch in der letzten 
Flash-Adresse.
Eine Applikation kann ihn dort auslesen und damit OSCCAL setzen, man muß 
dafür aber das Löschen vor dem Programmieren ausschalten!


Peter

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> All das ist in Assembler auch keine Hexerei.
Nö :-) Vor allem, da's sowieso schon passend umgestellt war, um die 
PUSH/POPs zu vermeiden. Hatte nur die LDs übersehen, die mir der 
Compiler reingewurschtelt hat und die beim Tiny12 auch nicht gehen.

Hatt's jetzt nochmal aus dem Gedächtnis nachgeschrieben, denn ich hab' 
meinen Arbeitsplatz heut' schon verlassen (dürfen).

Ich denk' es ist fehlerfrei, ohne schädlichen Opcodes :D
Wenn nicht, wird das Forum sicher seinen Teil dazu beitragen.
$regfile = "attiny12.dat"
$crystal = 1200000
$noramclear
$swstack = 0
$framesize = 0

Cnt1 Alias R16
Cnt2 Alias R17
Cnt3 Alias R18
Tmp Alias R19

Const Cnt1_Limit = 46
Const Cnt1_Preload = Cnt1_Limit - 1

Config Timer0 = Timer , Prescale = 1024
On Ovf0 Tim0_isr Nosave
Config Portb.1 = Output

  !LDI     Cnt1,     Cnt1_Preload                           ' 45
'Cnt1 = 0

  !LDI     Cnt2,     0
'Cnt2 = 0

  !LDI     Cnt3,     0
'Cnt3 = 0

Enable Timer0
Enable Interrupts
Start Timer0

' Endlosschleife
Do
Loop

End

' Timer Interrupt 1.2MHz/1024/256 = 4,577Hz (=218,4ms)
Tim0_isr:
  !INC     Cnt1
'  Cnt1 = Cnt1 + 1

  !CPI     Cnt1,     Cnt1_Limit                             ' 46
  !BRNE    ISR_End
'  If Cnt1 = 46 Then                                         ' DIV 46 ->1/10,04s

  !LDI     Cnt1,     0
'      Cnt1 = 0

  !CPI     Cnt2,     0
  !BRNE    Port_Clear
'      If Cnt2 <> 0 Then Goto Port_Clear

  !CPI     Cnt3,     0
  !BRNE    Port_Clear
'      If Cnt3 <> 0 Then Goto Port_Clear

  !SBI     PORTB,    1
'         Portb.1 = 1

  !RJMP   Port_End
'           Goto Port_End

!Port_Clear:
  !CBI     PORTB,    1
'         Portb.1 = 0
!Port_End:

  !LDI     Tmp,      64
  !ADD     Cnt2,     Tmp
'      Cnt2 = Cnt2 + 64

  !CPI     Cnt2,     0
  !BRNE    Ctr3_No_Inc
'      If Cnt2 <> 0 Then Goto Ctr3_No_Inc

  !INC     Cnt3
'         Cnt3 = Cnt3 + 1
!Ctr3_No_Inc:

  !CPI     Cnt3,     1
  !BRNE    Ctrs_No_Reset
'      If Cnt3 <> 1 Then Goto Ctrs_No_Reset

  !CPI     Cnt2,     0
  !BRNE    Ctrs_No_Reset
'      If Cnt2 <> 0 Then Goto Ctrs_No_Reset

  !LDI     Cnt3,     0
'         Cnt3 = 0

  !LDI     Cnt2,     0
'         Cnt2 = 0

  !LDI     Cnt1,     Cnt1_Preload                           ' 45
!Ctrs_No_Reset:
!ISR_End:
Return

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann das aber auch ganz einfach in Assembler schreiben:
.nolist
.include "tn12def.inc"

        .equ    XTAL = 1200000        ; 1.2MHz

        .equ    zeit1 = 10            ; 10s
        .equ    zeit2 = 60 * 60 * 24  ; 24h

.macro  warte
        ldi     r16, byte1( @0 / 6)
        ldi     r17, byte2( @0 / 6)
        ldi     r18, byte3( @0 / 6)
        ldi     r19, byte4( @0 / 6)
_warte11:
        subi    r16, byte1(1)         ; 1 Zyklus
        sbci    r17, byte2(1)         ; 1 Zyklus
        sbci    r18, byte3(1)         ; 1 Zyklus
        sbci    r19, byte4(1)         ; 1 Zyklus
        brne    _warte11              ; 2 Zyklen
                                      ; = 6 Zyklen
.endmacro
.list
.listmac


main:
        sbi     ddrb, pb1
loop1:
        sbi     portb, pb1
        warte   XTAL * zeit1          ; 10s
        cbi     portb, pb1
loop2:
        ldi     r20, 240              ; 240 * 6min = 24h
        warte   XTAL * zeit2 / 240    ; 6min
        dec     r20
        brne    loop2
        rjmp    loop1


Peter

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Man kann das aber auch ganz einfach in Assembler schreiben:
Klar kann man. Nun, ich dachte daran daß Assemblercode in gewohnter 
Umgebung mit den entsprechenden Kommentaren versehen erstens vom TO 
besser verstanden, und zweitens dadurch für ihn auch anpassbar sein 
wird. Drittens natürlich, daß mir die Basic/Assembler-Kombination liegt.

Du kannst meinen Code lesen, ich kann Deinen verstehen, nur kann der TO 
das auch ? Wobei mir die Aufgabe des Tagestimers und das Interesse dafür 
doch sehr projektbezogen aussieht und ich nicht darauf wetten würde, daß 
der TO die µC-Programmierung freiwillig weiterverfolgt wenn er nicht 
muss.

Aber jetzt hat er ja zwei Versionen :D

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab mir das (Sklaven)treiben hier mal angesen;

Fred vom Jupiter schrieb:
> Habe mich für den Tiny12 entschieden weil die Platine so klein wie
> möglich gehalten werden muß.
der attiny85 ist genauso gross, FAULE AUSREDE, i denk so kannst du
mehr auf hilflos machen und andere haben dir das programm geschrieben,
nicht dumm; aber meiner meinung nach eine frechheit....

> Ist echt total panne,....wieviel Zeit man investieren muß für
> so eine "kleine" Schaltung.
OH, war das warten auf fertige Programme SOOO schlimm ?

ich bin der meinung du hast noch nicht einmal versucht was
wirklich selber zu machen oder die erhaltenen Programme zu
verstehen, nur die aussage :'läuft nicht' oder
'läuft immer noch nicht' .....

> Also ich würde vor freude im Dreieck springen wenns
> damit funktioniert.
Ich wuerd vorschlagen du schickst Falk z.B. mal 50€ damit er
mit seiner Frau vielleicht mal einen netten Abend verbringt,
als Dankeschoen, oder ?


> Aber wie gesagt, der Atmega8 läuft mit dem
> Quellcode ja auch nicht.
welcher Quellcode ?

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Charly B. schrieb:
> Ich wuerd vorschlagen du schickst Falk z.B. mal 50€ damit er
> mit seiner Frau vielleicht mal einen netten Abend verbringt,
> als Dankeschoen, oder ?

Vielleicht sollte ich Dir 50€ zukommen lassen, wenn man schon nachts vor 
so einer Aufgabe sitz. Scheinst wohl keine Frau zu haben.
Aber interesse haste wohl schon dir die ganzen Beiträge durchzulesen. 
Maulheld!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs nochmal ausprobiert, der Assembler rechnet Konstanten mit 64Bit 
aus.
Man kann also alle 5 Zählbytes in das Delaymacro packen und dann bis max 
7696581394432 Zyklen warten (74 Tage).


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>        ldi     r16, byte1( @0 / 6)

Byte1 gibt es nicht. Da muss  'Low( @0 / 6)' hin.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Byte1 gibt es nicht. Da muss  'Low( @0 / 6)' hin.

Dann mußt Du das mal Atmel sagen, damit sie es aus dem Assembler 
entfernen.
Es gehts jedenfalls.
Ulkiger Weise steht es aber nicht mehr in der AVRStudio Hilfe drin.


Peter

Autor: Oliver N. (nixo2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo sind die Analog-Experten, die die Problemstellung mit R/C-Glied / 
Logik / NE555 lösen können?

Grüße
Oliver

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Es gehts jedenfalls.

Stimmt.

>Ulkiger Weise steht es aber nicht mehr in der AVRStudio Hilfe drin.

Aber schon seit längerem.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier nochmal etwas hübsch gemacht mit langem Delay-Macro:

.nolist
.include "tn12def.inc"

        .equ    F_CPU = 1200000       ; 1.2MHz

        .equ    zeit1 = 10            ; 10s
        .equ    zeit2 = 60 * 60 * 24  ; 24h

#define byte5(x)  byte4(x / 256)

.macro  warte
        ldi     r16, byte1( @0 / 7 )
        ldi     r17, byte2( @0 / 7 )
        ldi     r18, byte3( @0 / 7 )
        ldi     r19, byte4( @0 / 7 )
        ldi     r20, byte5( @0 / 7 )
_warte11:
        subi    r16, byte1(1)         ; 1 Zyklus
        sbci    r17, byte2(1)         ; 1 Zyklus
        sbci    r18, byte3(1)         ; 1 Zyklus
        sbci    r19, byte4(1)         ; 1 Zyklus
        sbci    r20, byte5(1)         ; 1 Zyklus
        brne    _warte11              ; 2 Zyklen
                                      ; = 7 Zyklen
.endmacro
.list
.listmac


main:
        sbi     ddrb, pb1
        sbi     portb, pb1
        warte   F_CPU * zeit1         ; 10s
        cbi     portb, pb1
        warte   F_CPU * zeit2         ; 1d
        rjmp    main


Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man pingelig ist, müsste es doch lauten

        .equ    zeit2 = 60  60  24 - 10  ; 24h

weil ja 10 Sekunden für die Ein-Phase drauf gegeangen sind.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Fred vom Jupiter

Ein Tag auf dem Jupiter ist aber nur 9,84 Stunden lang. Du mußt doch 
auch
unheimliche Portokosten haben, wenn Du Dir die Kontroller liefern 
läßt...
;-)
MfG Paul

Autor: Fred vom Jupiter (andreasluebbers)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Über Hermes ist das am billigsten,....

Autor: Oliver N. (nixo2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Saturn dürfte aber näher dran sein... ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.