Ik moet een stappenteller bouwen voor school, mbv een microcontroller om meer inzicht te krijgen in de microcontroller. Nu gebruiken we een Atmel Atmega32. En voor het beeld gebruiken we een HD44780 LCD scherm. Het scherm werkt perfect, alle strings die we maar willen kunnen we erop krijgen, en zelfs een scroll mogelijkheid.
Nu is het zo, dat ik de software voor het 'tellen' van de stappen heb geschreven.
En dat is geen moeilijke code.
Heel mooi, hij telt. Erg leuk. Grote mijlpaal in ons project.
Nu het probleem; Ja, hij telt wel. Maar op een 'random' moment, springt de teller gewoon weer op nul.
We dachten dat dit met de 'dender' te maken heeft van de sensor, dit is het echter niet. Want als ik als een ongelovelijke spast ga lopen drukken. Springt hij ook pas na een tijd op nul.
Ik dacht dat het dan aan het geheugengebruik zou liggen. Maar dat is niet logisch, want ik heb voor 'str' 20 array plekken. Oftewel, genoeg ruimte om een 3 cijferig getal in op te slaan lijkt je niet?
Nu zou het kunnen liggen, dat b dus op nul wordt gezet, dat dat in str wordt geschreven waardoor er ' 0 ' op het scherm komt te staan.
Probleem is, waar zou ' b ' nul kunnen worden. Want de enige operatie die ik heb met ' b ' is ' b++ '.
De vraag is dus heel simpel:
Waarom zou de teller 'spontaan' op nul komen te staan? En hoe zou ik dit op kunnen lossen?
De volledige code van de 'stappenteller' staat btw hier.
Nu is het zo, dat ik de software voor het 'tellen' van de stappen heb geschreven.
En dat is geen moeilijke code.
C:
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
| do { if ( !(PINB & 0x80)) // Knop zeven ingedrukt? { b++; buffer = 0x01; schrijf_instructie(); sprintf(str, "%d", b); zet_op_scherm(str); // Zet tekst op LCD do // Wacht tot knop weer losgelaten wordt. { } while (!(PINB & 0x80)); } else { sprintf(str, "%d", b); buffer = 0x01; schrijf_instructie(); zet_op_scherm(str); // Zet string op scherm do // Wacht totdat knop 7 weer ingedrukt wordt. { } while ((PINB & 0x80)); } } while (1); // Infinite loop |
Heel mooi, hij telt. Erg leuk. Grote mijlpaal in ons project.
Nu het probleem; Ja, hij telt wel. Maar op een 'random' moment, springt de teller gewoon weer op nul.
We dachten dat dit met de 'dender' te maken heeft van de sensor, dit is het echter niet. Want als ik als een ongelovelijke spast ga lopen drukken. Springt hij ook pas na een tijd op nul.
Ik dacht dat het dan aan het geheugengebruik zou liggen. Maar dat is niet logisch, want ik heb voor 'str' 20 array plekken. Oftewel, genoeg ruimte om een 3 cijferig getal in op te slaan lijkt je niet?
Nu zou het kunnen liggen, dat b dus op nul wordt gezet, dat dat in str wordt geschreven waardoor er ' 0 ' op het scherm komt te staan.
Probleem is, waar zou ' b ' nul kunnen worden. Want de enige operatie die ik heb met ' b ' is ' b++ '.
De vraag is dus heel simpel:
Waarom zou de teller 'spontaan' op nul komen te staan? En hoe zou ik dit op kunnen lossen?
De volledige code van de 'stappenteller' staat btw hier.
[ Voor 4% gewijzigd door Virgil op 13-10-2004 16:26 ]
Ik was heel, heeeel vroeger SeRRveR