Forum: Mikrocontroller und Digitale Elektronik Zähler mit PIC


von Mario H. (mariohorvat)


Lesenswert?

Hallo,
so ich hätte ein kleines Problem

alsoo ich habe mir einen zähler programmiert welcher mitzählt wie oft 
ich eine Taste Drücke der funktioniert auch wunderbar.

Aber ich kann nur bis 9 Zählen dann werden Zeichen angezeigt, was aber 
logisch ist den 30+9 = ASCII 9.

Nun würde ich gerne wissen wie ich mehr als bis 9 Zählen kann??


Verwende den PIC16f628A
und programmiere in Assembler

Bitte um Hilfe

von John (Gast)


Lesenswert?

Hallo Mairo,
mit einer Stelle kannst Du nur bis 9 Zählen - Du brauchst eine weitere 
Variable (Zehner-Stelle). Sobald die Einer-Stelle "9" erreicht hat, wird 
beim nächsten Tastendruck die Einer-Stelle auf "0" gesetzt und die 
Zehner-Stelle um eins erhöht.

Du kannst auch binär zählen und den Wert für die Anzeige entsprechend 
umwandeln.

Hier gibt es ein paar Beispiele für die Umwandlung (4 bis 32 bit):
http://www.piclist.com/techref/microchip/math/radix/index.htm

z.B: mit 8-Bit ist der Zählbereich 0...255.
Du brachst dafür: Binary to ASCII - '8bit to ASCII Decimal 3 digits'

Gruß
John

von Lehrmann M. (ubimbo)


Lesenswert?

Mario Horvat schrieb:
> Aber ich kann nur bis 9 Zählen dann werden Zeichen angezeigt, was aber
> logisch ist den 30+9 = ASCII 9.
>
> Nun würde ich gerne wissen wie ich mehr als bis 9 Zählen kann??

Servus,

ich empfehle dir die sog. Modulo Funktion.

Die Modulofunktion gibt den Rest der Division heraus.

Hier Beispiel in C

12/10 = 1 //normale Division, bei ganzen Zahlen wird die Nachkommastelle 
ignroiert.

12%10 = 2  // dies ist die Modulofunktion. 12/10 ergibt 1 mit Rest 2.

von Lehrmann M. (ubimbo)


Lesenswert?

Hui sorry,

ich hab gerade bemerkt, dass das was ich oben geschrieben hab nicht so 
ganz das war was du gesucht hast ...

von Lehrmann M. (ubimbo)


Lesenswert?

Ich hab dir hier mal einen Auszug aus einer Trinär-Uhr. Trinär ist egal 
- wichtig ist nur, die Sekunde erhöht sich und je nachdem erhöht sich 
die Minute und Stunde ... kannst du umschreiben für dich ...
1
                                       sekunde++;
2
                                         if(sekunde==60){
3
                                                         sekunde=0;
4
                                                         minute++;
5
                                                         }
6
                                         if(minute==60){
7
                                                        minute=0;
8
                                                        stunde++;
9
                                                        }
10
                                         if(stunde==24){
11
                                                        stunde=0;
12
                                                        }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lehrmann Michael schrieb:
> ich empfehle dir die sog. Modulo Funktion.
> Hier Beispiel in C
Tolle Empfehlung...
Mario Horvat schrieb:
> programmiere in Assembler

Mario Horvat schrieb:
> Nun würde ich gerne wissen wie ich mehr als bis 9 Zählen kann??
Nimm wie schon gesagt ein paar Bytes her und zähle dort wie im 
Zehnersystem üblich: z.B. Tausender Hunderter Zehner Einer

Erst wird bei einem Tastendruck der Einer um 1 hochgezählt. Wenn dabei 
10 herauskommen, wird der Einer auf 0 gesetzt und der Zehner um eins 
hochgezählt. Wenn dabei 10 herauskommen, wird der Zehner auf 0 gesetzt 
und der 100er hochgezählt. Usw. Usf...

von Mario H. (mariohorvat)


Lesenswert?

ok leute dankee

ich werde es versuchen, vl. schaffe ich es jaa :D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.