Hallo,
in dem angehängten Programm soll eine variabele beim tastendruck erhöht
(pinb.0) bzw resetet (pinb.1) werden.
Diese variabele soll ins eeprom gesschrieben werden damit sie auch ohne
versorgungsspannung gespeichert wird.
Allerdings funktioniert das noch nicht wie gewollt.
Das hochzählen und reseten geht.
Aber nach dem aus und wieder einschalten der Versorgungsspannung ist die
variabele wieder bei 0
was mache ich falsch, dass die werte nicht ins eeprom geschrieben werden
bzw nicht ausgelesen werden?
Mit freundlichen Grüßen
Alex
Hi,
Count1 wird erst mit dem Wert von EEprom geladen wenn Du einmal den
Taster gedrückt hast.
Statt dieser unendlich langen auswertung von Count1, versuchs mal so:
Dim Dummy as byte
.
.
.
Dummy = 0
Dummy.count1 = 1
Porta = Dummy
Ein Überlauf für Count1 fehlt auch. Ab 8 drückst Du viele Male bis
Count1 nach 255 endlich überläuft und wieder etwas passiert.
Was soll überhaupt Count2?
Brauchst Du nicht.
Gruß,
Norbert
der Programmablauf ist Murks ...
If Pinb.0 = 1 Then
Count1 = Count2 + 1
Waitms 500
End If
Countee = Count1
daraus folgt, dass Dein EEPROM bei jedem Programmdurchlauf, egal ob
Taste gedrückt oder nicht neu überschrieben wird. Das EEPROM hat aber
nur n paar tausend Lösch- und Schreibzyklen und dann war es das mit der
Zelle
Hi,
einhunderttausendmal schrieb:> sag isch doch..
Nee, Du hast Dich über den Fragesteller lustig gemacht.
Ganz super bei einem Anfänger, toll.
Ich tippe mal, daß die Zelle schon im Arsch ist...
Count2 ist auch über.
Also:
Dim Countee As Eram Byte at 1
Portb.0 = 1
Portb.1 = 1 'Pullups
If Pinb.0 = 1 Then
Incr Count1
Count1 = Count1 And &h07
Countee = Count1
Waitms 500
End If
If Pinb.1 = 1 Then
Count1 = 0
Countee = Count1
Waitms 500
End If
Die Taster funktionieren damit zwar immer noch besch... aber die zweite
Zelle lebt erstmal länger.
Gruß,
Norbert
Hallo,
also ich habe das Programm nochmal umgeschrieben.
Das hochzählen läuft jetzt mit einer Variable.
>Dim Dummy as byte>.>.>.>Dummy = 0>Dummy.count1 = 1>Porta = Dummy
Das verstehe ich nicht ganz
Allerdings kann ich daraus entnehmen, dass man Porta = count schreiben
kann.
Das funktioniert auch.
Das komische ist, dass die variable jetzt manchmal (aber nur für ein
paar sekunden ???) gespeichert ist.
Manchmal aber kommt entweder 255 oder müll.
Mit freundlichen Grüßen
Alex
Hast du die Brownout Detection eingeschaltet (Fuse-Setting)?
Bei der EEPROM Zelle 0 kann es manchmal zu eigentümlichen Effekten
kommen, wenn die nicht aktiviert ist.
ok ich habe beim vorherigen post ein paar beiträge verpasst :/
Ich habe jetzt mal wie du während des tastendrucks die Daten ins eeprom
geschrieben und das funktioniert :)
was bedeutet in deinem code das "Incr " und das "&h07"
und warum Dim Countee As Eram Byte at 1 ?
Vielen Dank
Alex
Hi,
Du beschreibst immer noch in jedem Zyklus das Eeprom mit Countee = Count
Das geht nicht, alle 20ms und max. 100000 Mal ist ne halbe Stunde. Die
Zelle ist sowieso schon kaputt, deswegen
Dim Countee as Eram Byte at 1
Das ist die zweite Zelle.
Du musst noch das Countee = Count in die If packen denn Du musst das ja
auch nur speichern, wenn es sich geändert hat.
Kannst ja mal probieren wie lange das ansonsten tut. Wie gesagt, nach
gut einer halben Stunde (oder auch erst nach ner Stunde) wird das sonst
auch nicht mehr funktionieren.
Wenn Du Zelle 1 auch kaputtgejackelt hast, kommt eben
Dim Countee as Eram Byte at 2
Porta = count geht natürlich, ist aber anders als Deine erste Version.
Jetzt siehst Du Count binär an Porta.
Config Portb.0 = Input
Ist übrigens vollkommen überflüssig. Wenn Du nix machst ist das default.
Count = 0
Count = Countee
Das ist auch Quatsch. Schreibst ne Null rein und dann sofort Countee.
Einfach nur Count = Countee
Gruß,
Norbert
Karl Heinz Buchegger schrieb:> Hast du die Brownout Detection eingeschaltet (Fuse-Setting)?> Bei der EEPROM Zelle 0 kann es manchmal zu eigentümlichen Effekten> kommen, wenn die nicht aktiviert ist.
Die Zelle hat er eh schon kaputtgeschruppt.
Edit: Das mit Zelle 0 gilt nur für ganz alte AVR.
alex schrieb:> was bedeutet in deinem code das "Incr " und das "&h07"> und warum Dim Countee As Eram Byte at 1 ?
Ganz heisser Tip: RTFM
Steht alles in der Bascom Hilfe, Befehlsreferenz.
Incr erhöht den Wert der Variable um 1.
Das Gleiche wie Count = Count + 1, nur schneller und weniger Code (ja,
Bascom ist so dumm)
And &h07 bedeutet ein logisches UND mit 0000 0111.
&h07 sagt Bascom, daß das jetzt Hex ist. &b00000111 ist eben binär,
dezimal 7.
Also:
Incr Count
Count = Count And &b00000111
Zählt immer von 0 bis 7 und läuft dann zu 0 über.
Kapiert?
Die Speicheradresse 0 im Eeprom ist vermutlich schon kaputt.
Dim Countee As Eram Byte at 1
Das sagt Bascom:"Pack Countee an Adresse 1 im Eeprom".
Gruß,
Norbert
Edit: 00000111 statt 00001111 natürlich.
hallo,
wie gesagt Countee = Count ist jetzt in der if schleife.
>Wenn Du Zelle 1 auch kaputtgejackelt hast, kommt eben>Dim Countee as Eram Byte at 2
demnach gibt das "at 2" was ich oben gefragt hatte die speicherzelle an
muss man das machen Bzw. gibt es Probleme wenn man das nicht macht?
>Count = 0>Count = Countee>Das ist auch Quatsch. Schreibst ne Null rein und dann sofort Countee.>Einfach nur Count = Countee
stimmt, ist unnötig
Hi,
alex schrieb:> demnach gibt das "at 2" was ich oben gefragt hatte die speicherzelle an> muss man das machen Bzw. gibt es Probleme wenn man das nicht macht?
Genau. Wenn Du nix angibst, nimmt Bascom den ersten freien Platz. Das
gilt auch für normale Variablen. Da lass aber erstmal lieber die Finger
von. Such mal nach Overlay in der Hilfe.
Wie hast Du die Taster beschaltet?
Gruß,
Norbert
ok, Overlay lese ich mir morgen durch
die taster sind nach 5V geschaltet und haben pull down Widerstände und
einen kondensator parallel zum entprellen
Mit freundlichen Grüßen
Alex B.
Hi,
gut, aber nimm den Kondensator weg oder schalte einen Widerstand in
Reihe zum Taster. Bei jedem Tastendruck schliesst Du den C kurz, das
kann der Taster nicht lange ab.
Entprellen kann man auch in Software und mit diesem ersten Gehversuch
(Waitms 500) ist das mehr als ausreichend entprellt.
Bitte nicht mit Debounce in Bascom. Das verschwendet Ressourcen und es
geht sehr gut zu Fuß, dann weisst Du was passiert.
Aber Eins nach dem Anderen.
Gruß,
Norbert
@Norbert
was soll der Quatsch mit Overlay ???, i denk du hast das
selber nicht verstanden
@Alex
es ist geschickter die Taster nach GND zu schalten, dann kannste den
internen PullUp verwenden.
versuch mal folgenden Code:
1
$regfile="m16def.dat"
2
$framesize=32
3
$swstack=32
4
$hwstack=32
5
$crystal=4000000
6
$baud=1200
7
8
ConfigPortb.0=Input
9
ConfigPortb.1=Input
10
11
ConfigPorta=Output
12
13
DimCountAsByte
14
15
DimCounteeAsEramByteAt3'neuezelle;)
16
DimDummyAsByte
17
18
'Count=0
19
20
Count=Countee
21
22
Do
23
24
25
IfPinb.0=1Then
26
Count=Count+1
27
GosubWrite2ee
28
Waitms500
29
EndIf
30
31
32
33
IfPinb.1=1Then
34
Count=0
35
GosubWrite2ee
36
Waitms500
37
EndIf
38
39
Porta=Count
40
41
Waitms20
42
Loop
43
44
Write2ee:
45
Dummy=Countee
46
47
IfCount<>DummyThen
48
Countee=Count
49
EndIf
50
51
Return
52
53
54
End
ps. die Spezialisten hier meckern du zerstoerst das EEprom, aber
keiner hat sich gedanken gemacht wie man das besser macht ....
vlG
Charly
Norbert S. schrieb:> Ganz heisser Tip: RTFM> Steht alles in der Bascom Hilfe, Befehlsreferenz.
empfehle ich dir auch !
> Incr erhöht den Wert der Variable um 1.> Das Gleiche wie Count = Count + 1, nur schneller und weniger Code (ja,> Bascom ist so dumm)
Count = Count + 1 ergibt folgenden Code:
ldi r26,k60
ldi r27,k00
ld r24,X
subi r24,kFF
st X,r24
Incr Count ergibt folgenden Code:
ldi r26,k60
ldi r27,k00
ld r24,X
subi r24,kFF
st X,r24
jetzt frag ich mich wer dumm ist ???
wieso muss ein Anfaenger mit solchen Unwahrheiten noch zusaetlich
verwirrt werden ?
http://www.youtube.com/watch?v=lJ7YY4HiD1I
vlG
Charly
Charly B. schrieb:> @Norbert> was soll der Quatsch mit Overlay ???, i denk du hast das> selber nicht verstanden
Aha, was soll daran falsch sein?
Da ist in der Hilfe das Prinzip beschrieben.
Natürlich braucht er hier kein Overlay aber er soll den Teil in der
Hilfe lesen.
Deine Lösung mit dem Eeprom ist der richtige Weg aber ändert nicht viel.
Nur wenn er ständig resettet wird nicht unnötig geschrieben.
Sicher ist "erst lesen, dann vergleichen und wenn ungleich dann
schreiben" richtig aber man muß die Leute dort abholen, wo sie stehen.
Und wenn Du es soooo besser weisst:
Config Portb.0 = Input
ist sinnlos, wenn Ddrb.0 nicht vorher irgendwo gesetzt wurde!
Ein paar weniger Leerzeilen und man könnte das auch besser lesen.
Bitte mal den Ton etwas mässigen.
Gruß,
Norbert
Hallo Charly,
vielen Dank, daß Du mich so überaus freundlich auf meinen Fehler bzgl.
Incr hingewiesen hast.
Das liebe ich so an diesem Forum. Niemand ist überheblich, keiner wird
von Besserwissern angepöbelt falls man sich mal irrt, echt klasse.
So macht das Helfen Spass!
Ach ja, Du plenkst. Durchgängig.
Ätsch.
Gruß,
Norbert
Norbert S. schrieb:> Und wenn Du es soooo besser weisst:> Config Portb.0 = Input> ist sinnlos, wenn Ddrb.0 nicht vorher irgendwo gesetzt wurde!
Da hab i doch garnichts dazu geschrieben, aber als Anfaenger
weis er event. nicht wie die Pins nach dem Reset stehen und da
schadet es nicht sie definiert zu setzen, ausserdem finde ich es
eine unart der *'struddelprogramierer'* sich auf irgendwelche
'koennte' oder 'muesste' annahmen zu verlassen
> Ein paar weniger Leerzeilen und man könnte das auch besser lesen.
haengt das jetzt an denn Leerzeilen das du es nicht verstehst ?
> Bitte mal den Ton etwas mässigen.
mein 'Ton' ist absolut OK, i denke nur dir gefaellt es nicht
das ich deinen Quatsch mit Fakten wiederlegt habe
>vielen Dank, daß Du mich so überaus freundlich auf meinen Fehler bzgl.>Incr hingewiesen hast.
Fehler macht jeder, auch ich (zwar selten :p ), ich finde es nur eine
FRECHHEIT von dir zu behaupten andere seien dumm (programmier
doch einen beseren Compiler )
>Ach ja, Du plenkst. Durchgängig.>Ätsch.
ja und?, sei doch Stolz, jetzt haste auch bei mir einen Fehler
gefunden (finger)
> Gruß,> Norbert
vlG
Charly
Lieber Charly,
Du scheinst ein echtes Problem zu haben.
Hängst Dich hier an der einen Bemerkung "dumm" auf.
Bascom ist sogar noch dümmer: Du hast es mit einem Byte getestet. Da ist
das identisch.
Mit einem Word oder Integer kostet das sogar noch mehr Takte mit INCR
als mit + 1.
Ja, ich lag sogar noch falscher als Du es entlarvt hast!
Mit /2 zu Shift sieht das aber wieder krass anders aus.
Probiere es mal aus.
Ist aber auch egal. Ich bin Bascom-Fan und stehe dazu. Da nehme ich mir
heraus, auch mal Kritik zu üben.
Marc hat aber einen tollen Job gemacht und macht ihn weiterhin, ohne
Frage.
Jetzt vergleiche mal meine Bemerkung dazu und dann was Du dazu
geschrieben hast.
Ganz in Ruhe.
Nochmal lesen.
Ganz in Ruhe.
Meine Bemerkung war eine Frechheit?
Dein Ton ist OK?
Immer noch dieser Meinung?
Dann kann ich nur hoffen, daß Du Dein Problem in den Griff bekommst,
bevor Du es irgendwann mal im Berufsleben mit anderen -realen- Menschen
zu tun haben wirst.
@alex:
Sorry, so ein Scheiß ist hier leider normal. Einfach ignorieren.
Wenn Du noch Fragen hast - nur zu.
Gruß,
Norbert
Norbert S. schrieb:> Dann kann ich nur hoffen, daß Du Dein Problem in den Griff bekommst,> bevor Du es irgendwann mal im Berufsleben mit anderen -realen- Menschen> zu tun haben wirst.
fuer mich sind alles 'reale' Menschen, auch die hier schreiben, und mein
Problem sind Leute die irgendwas behaupten ohne davon Ahnung zu haben
und dadurch andere verwirren, verunsichern oder wie auch immer....
oder wuerdest du ein 5KV Kabel anfassen wenn ich sage: "ich glaube da
ist keine Spannung mehr drauf", vielleicht denkste mal darueber nach
zu deiner info: ich hab ueber 30 Jahre Berufserfahrung & Programmiere
u.a. auch in Bascom, sogar Multitaskingsysteme; und klar hat auch
Bascom seine Fehler den Marc ist auch nur ein Mensch aber f. den
Preis ist es meiner Meinung nach einfach SPITZE
ich will hiermit keine diskusion ueber Bascom oder ueber guten oder
schlechten Ton ausloesen, das obengesagte ist meine Meinung und ich
hasse diese Aussagen ohne jede Grundlage (bei uns sagt man: besser
dummgeschwaetzt als gar nix gesagt)
> Sorry, so ein Scheiß ist hier leider normal.
wieso Norbert?, machst du das oefter? ;)
f. mich ist die Diskusion hiermit zu ende
vlG
Charly