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?
@ 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
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!
Jemand ne schnelle und einfache Lösung? Außer ne Zeitschaltuhr vom Baumarkt !?
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.
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.
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.
Die Schleife macht mir immer noch Probleme! Wenn nichts am TV läuft und jemand Lust hat, immer her mit dem Quellcode.
Gast
#1882914
for i=0 to 60 for j=0 to 1000 [...] next next
Gast
#1882930
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
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.
Falk Brunner schrieb: > Ergo. Forget about it mit BASCOM. WITH lieber Falk, with nicht mit ;) Immer diese verdenglischung ;)
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
Oder doch? http://www.mitchsoft.de/Tips/BascomIDE/ATtiny_ohne_SRAM/Start.html 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
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ß?
Wahrscheinlich fehlt die Initialisierung Cnt3 = 0
Danke für die Antwort, werde gleich mal testen ob dann alles soweit startet.
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?
$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.
Gast
#1883304
> Der Tiny wird nicht auf 1.2Mhz laufen.
Doch, Karl Heinz, tut er.
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.
Gast
#1883325
> Bist du sicher?
Nur was das Datenblatt mir sagt, ich würde keine Abweichung um -42%
erwarten, 10% vielleicht.
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
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
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
also, das sind schon wirklich die Schätzprügel, die du da hast. 10% ist bei denen hochpräzise :-)
Gast
#1883343
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
Gast
#1883347
> 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/doc1006.pdf > Aber das Teil ist uralt! Yep, mit 3 Level Stack :D
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.
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?
wieso iss das datenblatt nimi online ? guggst du da : http://www.atmel.com/atmel/acrobat/doc1006.pdf
Charly B. schrieb: > wieso iss das datenblatt nimi online ? Ich weiß nicht. Ich hab wahrscheinlich mit dem Weißen vom Auge geschaut.
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
Gast
#1883405
> 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.
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....
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?family_id=607 durch.
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.
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.
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.
Gast
#1883457
> 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:
1 | |
2 | |
3 | |
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 ? :-)
1 | |
2 | |
@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.
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.
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.
Gast
#1883486
> 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.
Hier nochmal die neue Version, sollte jetzt passen. MFg Falk
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!
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!
Gast
#1883718
Welche Bascom Version ? Flash das hex in den µC, toggelt die Led mit 4,6 Hz
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 !!!!!
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
Gast
#1883745
> 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:1 | |
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
@ 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 . . .
Gast
#1883783
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.
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.
@ 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
Gast
#1883829
> 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.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
@ 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
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?
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!
@ 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
Gast
#1883923
> Damit läuft er aber immer noch nicht!
Kein Mucks ? Nicht nach 10 Sekunden mal die Led an ?
Gast
#1883992
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 ;-)
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
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.
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
Gast
#1884191
> 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.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
Man kann das aber auch ganz einfach in Assembler schreiben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
Peter
Gast
#1884574
> 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
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 ?
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!
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
Gast
#1884706
Hi
> ldi r16, byte1( @0 / 6)
Byte1 gibt es nicht. Da muss 'Low( @0 / 6)' hin.
MfG Spess
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
Wo sind die Analog-Experten, die die Problemstellung mit R/C-Glied / Logik / NE555 lösen können? Grüße Oliver
Gast
#1884790
Hi >Es gehts jedenfalls. Stimmt. >Ulkiger Weise steht es aber nicht mehr in der AVRStudio Hilfe drin. Aber schon seit längerem. MfG Spess
Hier nochmal etwas hübsch gemacht mit langem Delay-Macro:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Peter
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.
Gast
#1885088
@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
Über Hermes ist das am billigsten,....
Saturn dürfte aber näher dran sein... ;-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.