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!
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.
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.
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ß?
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.
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.
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
OSCCAL Value Typical Lowest Frequency Typical Highest Frequency
2
with Respect to Nominal Frequency with Respect to Nominal Frequency
3
4
0x00 50% 100%
5
0x3F 75% 150%
6
0x7F 100% 200%
also, das sind schon wirklich die Schätzprügel, die du da hast. 10% ist
bei denen hochpräzise :-)
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
> 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?
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
> 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.
> 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
'If Cnt2 = 0 Then
2
' Cnt3 = Cnt3 + 1
3
' 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 ? :-)
1
Cnt1 = 0
2
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.
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.
> 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.
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!
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 HzLED Blinkt!
Meine Ausrüstung:
Pollin Evalutionboard, Bascom Versin 1.11.9.8, Eingespielt wird über
PonyProg
> 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
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
@ 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 . . .
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
> 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.
@ 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?
@ 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
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
> 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.
> 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
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
@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