20M2 a 7 segment

Odpovědět
Pepa z depa
Příspěvky: 85
Registrován: 02 úno 2014, 02:12

20M2 a 7 segment

Příspěvek od Pepa z depa »

Zdravím všechny přispívající.
Mám Picaxe 20M2 za ním 2 ks CD4511 (dekodéry kódu BCD na 7misegmentovky).
Dále mám tlačítka + a -. Bude to v podstatě obousměrný čítač 0 až 99.
Nějak si nevím rady s programem. Pokud bych použil "letdirs, letpins" (+if/elseif), tak mi vychází 300 řádků jenom obsluha displeje a to je moc.
Ty tlačítka + a - mám vyřešený, ale potřeboval bych nakopnout správným směrem, jak pořešit ten BCD kód.
Momentálně to mám takhle:

Kód: Vybrat vše

zobraz:                        ; podprogram pro nastaveni displeje
	 
      if cislo=0 then   	; zobrazit 00
	DIRSC=%11000000	
	PINSC=%11000000
	 			
      elseif cislo=1 then      ; zobrazit 01...
	DIRSC=%11000100
	PINSC=%11000100
		 
      elseif cislo=2 then
	DIRSC=%11100000
      PINSC=%11100000
     ...

Poradíte někdo?
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: 20M2 a 7 segment

Příspěvek od Vladimir66 »

asi stejny dotaz byl reseny tady:
http://www.picaxeforum.co.uk/showthread ... splay-code
-V66
Naposledy upravil(a) Vladimir66 dne 25 črc 2017, 20:58, celkem upraveno 2 x.
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: 20M2 a 7 segment

Příspěvek od DavidO »

Převádět to postupnýma ifama je opravdu nevhodné. Pro převod čísla na BCD se používá "double dabble" algoritmus, viz třeba http://www.eng.utah.edu/~nmcdonal/Tutor ... rsion.html nebo https://en.wikipedia.org/wiki/Double_dabble .
Dále, nastavení směru pinů by mělo být tak, aby vše byl výstup (DIRSC=0xff), ať už se tam ukazuje hodnota jaká chce.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: 20M2 a 7 segment

Příspěvek od Vladimir66 »

to Pepa:

jednoduse nastavis smer pro portB na vystupy DIRSB=0xff
udelas prevod jak psal David a posles to na port PINSB=cislo
portB prodratujes: B0 na vstup CD4511 A0, B1-A1, B2-A2, B3-A3, B4-A0 druhe CD4511, B5-A1, B6-A2, B7-A3
mezi kazdy vystup CD4511 a 7mi segmentovkou dej odpory 1K (?) budes mit pak stejny jas zobrazovane jednicky i osmicky. nez pri spolecnem odporu na katode.

musel jsem to napsat takto primitivne protoze jsem nepochopil jak to mas prodratovane..
(kdyz 00 je 11000000 , 01 je 11000100 a 02 je 11100000 ??)

! Picaxe20M2 ma celkovy proudovy odber 80mA, takze mezi vystupy 20M2 a vstupy CD4511 dej take odpory (8x).
(pokud mas jeste neco poveseneho na vystup, tak by jsi mohl prekrocit max proud)

!! pouzij portB, protoze pin C.6 je pouze vstupni.

-V66
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: 20M2 a 7 segment

Příspěvek od Vladimir66 »

to Pepa:

nedelam s Picaxe - musis vyzkouset

vstupni cislo je 0-99 ok ?
1) b1=cislo //zobrazovane dekadicke cislo
2) b2=b1/10 //ziskame desitkovy digit
3) b2=b2*16 //prevedeme na sestnactkovou soustavu (BCD kod je v HEXu)
4) b3=b1%10 //zbytek po deleni ktery budeme pricitat k vysledku
5) b4=b2+b3 //pricteme modulo a dostaneme hex, kde vyssi půlbyte jsou desitky cisla a nizsi půlbyte jsou jednotky cisla

napr. 99 potrebujeme prevest na 1001 1001 coz je 99h nebo take 153 v desitkove soustave
1) b1 je 99
2) b2 je 9
3) b2 je 144
4) b3 je 9
5) b4 je 153 cili 1001 1001 :)

-V66
Odpovědět