SBC6502 - 62 - basic programs. 7segments LED plus dp.

By Administrator at januára 27, 2023 15:30
Filed Under: SBC6502

Vyťahujem na svetlo sveta jeden môj starší program pomocou ktorého je možné si vyrobiť na LED-kovej sedemsegmentovke ktorá má k dispozícii aj desatinnú bodku celkom zaujímavé výstupy, je tu využitých plných 8 bitov na výstupe PROM 74188. Je to zaujímavé hlavne vtedy ak potrebujeme použiť sedemsegmentovky na výstup pre alfanumerické znaky. Nakoniec som program inovoval a dáva teraz k dispozícii na svojom výstupe viac údajov - ale až vo verzii 1.01.


Program je koncipovaný tak, že najprv si v programe vytvoríme potrebné znaky a na konci programu sa kompletne vygenerujú dve zostavy: 


z.1.- je určená pre displej zo spoločnou anódou - common anode (CA)

z.2.- je určená pre displej zo spoločnou katódou - common cathode (CC)

Len zdôrazním použitie jednotlivých výstupov z čipu 74188:


Y8=dp Y7=g Y6=f Y5=e Y4=d Y3=c Y2=b Y1=a

 

Program som napísal na chalupe presne pred 3 rokmi (letí to ...), zabralo mi to jedno poobedie. Je viac ako pravdepodobné že sa to dá urobiť aj lepšie a inak, ale niektoré obmedzenia výpisu na terminál sa dajú len ťažko obísť a teda zobrazenie je potom také aké je. Program má aj ochranu pred zadaním nesprávnych údajov. Dnes sa už dá povedať že program je už vekom mierne overený, používa nastavenie na 72 znakov v riadku, ktoré je štandartne nastavené po spustení SBC6502 alebo MICRO UK101.

 

Program, verzia 1.0:

 

1000 ? CHR$(12)SPC(12)"Igi(c) 27.01.2020":GI=31000
1001 ? SPC(9)"SBC6502 or Micro UK101":K$="DATA"
1002 ?SPC(16)"32kB/RAM":W$="0123456789ABCDEF"
1003 FOR A=GI TO GI+31:POKE A,0:NEXT
1004 FOR F=0 TO 12000:NEXT:FOR A=GI TO GI+31
1005 ? CHR$(12);:B=255:POKE A,B
1010 ? "  PROM 74188 7-LED display + dec.point"
1020 ? "   for common cathode + common anode"
1030 ? "Y8=dp Y7=g Y6=f Y5=e Y4=d Y3=c Y2=b Y1=a"
1040 ? "  LED 7segments+dp:":?
1130 ? SPC(8)"**a**"
1140 ? SPC(7)"*     *"
1150 ? SPC(7)"f     b           Y=LED ON"
1160 ? SPC(7)"*     *"
1170 ? SPC(8)"**g**            N=LED OFF"
1180 ? SPC(7)"*     *"
1190 ? SPC(7)"e     c"
1200 ? SPC(7)"*     *"
1210 ? SPC(8)"**d**  *dp";
1220 ?"       byte no:";A-GI;"dec":?
1250 INPUT " a:";A$:IF A$="Y" OR A$="N" THEN 1252
1251 GOTO 1250
1252 IF A$="Y" THEN B=B-1:POKE A,B
1260 INPUT " b:";B$:IF B$="Y" OR B$="N" THEN 1262
1261 GOTO 1260
1262 IF B$="Y" THEN B=B-2:POKE A,B
1270 INPUT " c:";C$:IF C$="Y" OR C$="N" THEN 1272
1271 GOTO 1270
1272 IF C$="Y" THEN B=B-4:POKE A,B
1280 INPUT " d:";D$:IF D$="Y" OR D$="N" THEN 1282
1281 GOTO 1280
1282 IF D$="Y" THEN B=B-8:POKE A,B
1290 INPUT " e:";E$:IF E$="Y" OR E$="N" THEN 1292
1291 GOTO 1290
1292 IF E$="Y" THEN B=B-16:POKE A,B
1300 INPUT " f:";F$:IF F$="Y" OR F$="N" THEN 1302
1301 GOTO 1300
1302 IF F$="Y" THEN B=B-32:POKE A,B
1310 INPUT " g:";G$:IF G$="Y" OR G$="N" THEN 1312
1311 GOTO 1310
1312 IF G$="Y" THEN B=B-64:POKE A,B
1320 INPUT "dp:";P$:IF P$="Y" OR P$="N" THEN 1322
1321 GOTO 1320
1322 IF P$="Y" THEN B=B-128:POKE A,B
1500 ? CHR$(12)" Resume byte no:"A-GI;"dec":?
1510 IF A$="Y" THEN ? "  *****"
1515 IF A$="N" THEN ? "  ....."
1520 FOR F=1 TO 3
1525 IF F$="Y" AND B$="Y" THEN ? " *     *"
1530 IF F$="N" AND B$="N" THEN ? " .     ."
1535 IF F$="Y" AND B$="N" THEN ? " *     ."
1540 IF F$="N" AND B$="Y" THEN ? " .     *"
1545 NEXT
1550 IF G$="Y" THEN ? "  *****"
1555 IF G$="N" THEN ? "  ....."
1560 FOR F=1 TO 3
1565 IF E$="Y" AND C$="Y" THEN ? " *     *"
1570 IF E$="N" AND C$="N" THEN ? " .     ."
1575 IF E$="Y" AND C$="N" THEN ? " *     ."
1580 IF E$="N" AND C$="Y" THEN ? " .     *"
1585 NEXT
1590 IF D$="Y" AND P$="Y" THEN ? "  ***** *"
1595 IF D$="N" AND P$="N" THEN ? "  ..... ."
1600 IF D$="Y" AND P$="N" THEN ? "  ***** ."
1605 IF D$="N" AND P$="Y" THEN ? "  ..... *"?
1620 ?:IF A<GI+31 THEN 2000
1630 GOTO 2001
2000 ? " (B)ad setting":? " (C)ontinue":? " (R)estart"
2001 ? " (E)nd":?:? " Your choice:";:INPUT A$
2002 ?:IF A$="B" OR A$="C" OR A$="R" OR A$="E" THEN 2004
2003 GOTO 2000
2004 IF A$="B" THEN 1005
2006 IF A$="C" THEN 2020
2008 IF A$="R" THEN RUN
2010 IF A$="E" THEN 2030
2015 GOTO 1005
2020 NEXT
2030 ? CHR$(12);:C=A-GI+1
2040 FOR A=GI TO GI+31:R=PEEK(A):POKE A+100,255-R:NEXT
2500 PD=GI:I=PD
2501 ? SPC(11)"PROM data - please, save this screen !"
2502 ? SPC(11)"Common anode:":GOSUB 2506:?:PD=GI+100:I=PD
2503 FOR A=PD+C TO PD+31:POKE A,0:NEXT
2504 ? SPC(11)"Common cathode:":GOSUB 2506:END   
2506 ? SPC(11)K$;" hex:":? SPC(12)"0000:";
2508 FOR F=PD TO PD+15:N=PEEK(F):GOSUB 2600:NEXT
2510 ?:? SPC(12)"0010:";
2512 FOR F=PD+16 TO PD+31:N=PEEK(F):GOSUB 2600:NEXT
2514 ?:? SPC(11)K$;" dec:"
2516 ? SPC(12)"9001 "K$;:GOSUB 2620:? SPC(12)"9002 "K$;:GOSUB 2620
2518 ? SPC(12)"9003 "K$;:GOSUB 2620:? SPC(12)"9004 "K$;:GOSUB 2620
2520 RETURN
2600 L=N AND 15:H=(N-L)/16
2610 ? MID$(W$,H+1,1)MID$(W$,L+1,1);" ";:RETURN
2620 FOR G=I TO I+6:? PEEK(G);CHR$(8);",";:NEXT:? PEEK(I+7):I=I+8
2630 RETURN

 

Download programu, verzia 1.0:

7segment_plus_dp_final.txt (3,43 kb)


V programe nie je uvedená verzia, vtedy som nepredpokladal že sa v tom ešte niekedy budem vŕtať ...

 

P.S.: platí pre riadok 1004:

1004 FOR F=0 TO 12000:NEXT:FOR A=GI TO GI+31

tu je potrebné meniť veľkosť premennej F podľa použitého x-talu:

 
x-tal 1.8432MHz: FOR F=0 TO 4500
x-tal 2.4576MHz: FOR F=0 TO 6000
x-tal 3.6864MHz: FOR F=0 TO 9000
x-tal 4.0000MHz: FOR F=0 TO 9770
x-tal 4.5000MHz: FOR F=0 TO 10990
x-tal 4.9152MHz: FOR F=0 TO 12000
x-tal 5.0000MHz: FOR F=0 TO 12200
x-tal 6.0000MHz: FOR F=0 TO 14650


Ako vidieť program samotný je určený pre tieto 2 typy SBC.


Uvodná obrazovka pre vkladanie dát, možné vstupy sú len Y alebo N.

Zároveň sa zobrazuje číslo bytu s ktorým sa práve robí /dec tvar/.


Tu som "nadlapal" číslicovku 6.


Po potvrdení sa zobrazí kontrolné resumé ako vyzerá nami zadaný údaj, potom máme tieto 4 možnosti:  B - vráti znova na začiatok bytu - teda nám umožní previesť opravu, C - OK,  pokračujeme na ďalší byte, R -prevedie kompletný reštart programu, E - koniec programu a výpis zostáv k danému okamžiku. Je tu možné zadávať jednu z týchto 4 možností, iné hodnoty sú odignorované. Zobrazenie som riešil tak že tá časť displeja čo nebude svietiť je tu vyznačená bodkami, viditeľná časť je vyznačená hviezdičkami.

 

Po stlačení E príde vždy k záverečnému výpisu, aj keď trebárs naprogramujeme iba 4 alebo čo ja viem iba 8 byte. Pretože pri common cathode (CC) sú výstupy invertované tak je v programe zabudovaná jedna fičúrka, ktorá jeho nepoužité zostávajúce byte preklopí do stavu 0d /00H/, t.j. nenaplní ich 255d /FFh/, teda stále tu zostáva možnosť ich naprogramovať neskôr (pri common anode /CA/ toto platí automaticky). Toto sa samozrejme používa len vtedy ak nie je údajmi zaplnená celá PROM.

 

Záverečný výpis po naplnení jedného bytu číslicou 6 a následnom stlačení E.

 

Teraz si predstavme že by sme chceli alfanumericky na sedemsegmentovke zobraziť písmeno Q, tu sa už musí bez desatinnej bodky skutočne čarovať, vcelku štandartne sa použije zobrazenie číslice číslo 9 pričom sa vynechá dolný segment g, tu sa ale na zobrazenie použijú iné segmenty:

Zadané je malé q.


Takto vyzerá výsledok.


Samozrejme je tu možné urobiť aj veľké Q.

Zadáme potrebné údaje pre zobrazenie.


A takto vyzerá veľké Q.

 

Je vidieť, že sa dajú celkom slušne rozšíriť schopnosti zobrazovania alfanumeriky na sedemsegmentovom displeji ktorý má k dispozícii aj desatinnú bodku. Ako ďalší príklad je zobrazenie písmena k, štandartne sa použije zobrazenie ako pre E, len sa vynechá horný a dolný segment /teda a a d/, je to také hot riešenie, na sedemsegmentovke zázraky neurobíte. Lenže tu zrazu stačí zapnúť destainnú bodku /dp/a to k je už akosi výraznejšie poznateľné že sa jedná o písmeno k.


Aby som nezabudol, po nadlapaní posledného 32 bytu /tu je to ale vlastne číslo 31d, pretože začínam nulou, teda rozsah je 0÷31d/ je ponúknutá iba možnosť ukončiť program cez E, potom príde k vygenerovaniu zostáv. Riešil som to takto preto pretože to bolo jednoduché a posledný byte, teda jeho vzhľad zostáva na displeji do stlačenia klávesy E. Je to pomocný program a nehodlal som tu vymýšľať nejaké divoké postupy ako to ukončiť, takže takto. /Za jedno poobedie sa toho viac nevymyslí - teda aspoň u mňa./

Zapojenie čipu pre CA a CC a teda aj ako majú byť zapojené odpory tu nebudem rozoberať - aj tak predpokladám že do toho sa pustí len ten čo vie o čom je reč, právom očakávam aspoň základnú znalosť problematiky. Pre použitie všetkých 32 znakov potrebujeme na vstupe 74188 ovládať už 5 bitov, čiže na toto nezabudnite.

 

Info:

Program ukladá 32 byte pre CA na adresách 31000÷31031d, pre CC sa potom generuje prevrátená hodnota na adresách 31100÷31131d. Následne sa porovná koľko byte je reálne zaplnených a potom pre CC zostavu prepíše /iba nepoužité !/ adresy nanovo na hodnotu =0d/00h/.


Prajem príjemnú zábavu s týmto programom !

______________________________________________________


29.01.2023

O rok neskôr som sa ešte s programom mierne popasoval a upravil som ho tak že poskytuje viac informácií ktoré sa občas môžu hodiť. Ono pre moje použitie stačila prvá verzia, prepočty do dec, hex a binárneho kódu som si robil v hlave, nevidel som v tom nejaký problém - ale takto je to predsa len pohodlnejšie ...


Teraz je to verzia 1.01, viď hlavička programu.

 

Odlišuje sa v zobrazení na tejto obrazovke, voľby sú uvedené v jednom riadku a pribudli tu výpisy pre Common Anode /CA/ a pre Common Cathode /CC/ + sú tu k dispozícii aj dec, hex a binárne výpisy. Forma výpisu po stlačení klávesy E zostala zachovaná.


Program verzia 1.01:

 

1000 ? CHR$(12)SPC(8)"Igi(c) 27.01.2021 v.1.01":GI=31000
1001 ? SPC(9)"SBC6502 or Micro UK101":K$="DATA"
1002 ?SPC(16)"32kB/RAM":W$="0123456789ABCDEF"
1003 FOR A=GI TO GI+31:POKE A,0:NEXT
1004 FOR F=0 TO 12000:NEXT:FOR A=GI TO GI+31
1005 ? CHR$(12);:B=255:POKE A,B
1010 ? "  PROM 74188 7-LED display + dec.point"
1020 ? "   for common cathode + common anode"
1030 ? "Y8=dp Y7=g Y6=f Y5=e Y4=d Y3=c Y2=b Y1=a"
1040 ? "  LED 7segments+dp:":?:? SPC(8)"**a**"
1140 ? SPC(7)"*     *"
1150 ? SPC(7)"f     b           Y=LED ON"
1160 ? SPC(7)"*     *"
1170 ? SPC(8)"**g**            N=LED OFF"
1180 ? SPC(7)"*     *"
1190 ? SPC(7)"e     c"
1200 ? SPC(7)"*     *"
1210 ? SPC(8)"**d**  *dp";"       byte no:";A-GI;"dec"
1250 ?:INPUT " a:";A$:IF A$="Y" OR A$="N" THEN 1252
1251 GOTO 1250
1252 IF A$="Y" THEN B=B-1:POKE A,B
1260 INPUT " b:";B$:IF B$="Y" OR B$="N" THEN 1262
1261 GOTO 1260
1262 IF B$="Y" THEN B=B-2:POKE A,B
1270 INPUT " c:";C$:IF C$="Y" OR C$="N" THEN 1272
1271 GOTO 1270
1272 IF C$="Y" THEN B=B-4:POKE A,B
1280 INPUT " d:";D$:IF D$="Y" OR D$="N" THEN 1282
1281 GOTO 1280
1282 IF D$="Y" THEN B=B-8:POKE A,B
1290 INPUT " e:";E$:IF E$="Y" OR E$="N" THEN 1292
1291 GOTO 1290
1292 IF E$="Y" THEN B=B-16:POKE A,B
1300 INPUT " f:";F$:IF F$="Y" OR F$="N" THEN 1302
1301 GOTO 1300
1302 IF F$="Y" THEN B=B-32:POKE A,B
1310 INPUT " g:";G$:IF G$="Y" OR G$="N" THEN 1312
1311 GOTO 1310
1312 IF G$="Y" THEN B=B-64:POKE A,B
1320 INPUT "dp:";P$:IF P$="Y" OR P$="N" THEN 1322
1321 GOTO 1320
1322 IF P$="Y" THEN B=B-128:POKE A,B
1500 ? CHR$(12)" Resume byte no:"A-GI;"dec":?
1510 IF A$="Y" THEN ? "  *****"
1515 IF A$="N" THEN ? "  ....."
1520 FOR F=1 TO 3
1525 IF F$="Y" AND B$="Y" THEN ? " *     *"
1530 IF F$="N" AND B$="N" THEN ? " .     ."
1535 IF F$="Y" AND B$="N" THEN ? " *     ."
1540 IF F$="N" AND B$="Y" THEN ? " .     *"
1545 NEXT
1550 IF G$="Y" THEN ? "  *****"
1555 IF G$="N" THEN ? "  ....."
1560 FOR F=1 TO 3
1565 IF E$="Y" AND C$="Y" THEN ? " *     *"
1570 IF E$="N" AND C$="N" THEN ? " .     ."
1575 IF E$="Y" AND C$="N" THEN ? " *     ."
1580 IF E$="N" AND C$="Y" THEN ? " .     *"
1585 NEXT
1590 IF D$="Y" AND P$="Y" THEN ? "  ***** *"
1595 IF D$="N" AND P$="N" THEN ? "  ..... ."
1600 IF D$="Y" AND P$="N" THEN ? "  ***** ."
1605 IF D$="N" AND P$="Y" THEN ? "  ..... *"
1620 ?:IF A<GI+31 THEN 1640
1630 GOTO 2001
1640 ? "type:"SPC(9)"dec:"SPC(9)"hex:"SPC(11)"binary :"
1650 ? SPC(42)"76543210":U=0:N=B:K=B
1670 ? " CA",B,:GOSUB 2600:GOSUB 2700:?
1680 N=255-B:K=255-B:? " CC",255-B,:GOSUB 2600:GOSUB 2700
2000 ?:?:? " (B)ad setting, (C)ontinue, (R)estart or";
2001 ? "  (E)nd":?:? " Your choice:";:INPUT A$
2002 ?:IF A$="B" OR A$="C" OR A$="R" OR A$="E" THEN 2004
2003 GOTO 2000
2004 IF A$="B" THEN 1005
2006 IF A$="C" THEN 2020
2008 IF A$="R" THEN RUN
2010 IF A$="E" THEN 2030
2015 GOTO 1005
2020 NEXT
2030 ? CHR$(12);::U=1:C=A-GI+1: FOR A=GI TO GI+31
2040 R=PEEK(A):POKE A+100,255-R:NEXT:PD=GI:I=PD
2500 ? SPC(11)"PROM data - please, save this screen !":?
2502 ? SPC(11)"Common anode:":GOSUB 2506:?:PD=GI+100:I=PD
2503 FOR A=PD+C TO PD+31:POKE A,0:NEXT
2504 ? SPC(11)"Common cathode:":GOSUB 2506:END   
2506 ? SPC(11)K$;" hex:":? SPC(12)"0000:";
2508 FOR F=PD TO PD+15:N=PEEK(F):GOSUB 2600:NEXT
2510 ?:? SPC(12)"0010:";
2512 FOR F=PD+16 TO PD+31:N=PEEK(F):GOSUB 2600:NEXT
2514 ?:? SPC(11)K$;" dec:"
2516 ? SPC(12)"9001 "K$;:GOSUB 2620
2517 ? SPC(12)"9002 "K$;:GOSUB 2620
2518 ? SPC(12)"9003 "K$;:GOSUB 2620
2519 ? SPC(12)"9004 "K$;:GOSUB 2620:RETURN
2600 L=N AND 15:H=(N-L)/16
2605 ? MID$(W$,H+1,1)MID$(W$,L+1,1)" ";:IF U=0 THEN ?,
2615 RETURN
2620 FOR G=I TO I+6:? PEEK(G)CHR$(8)",";:NEXT
2622 ? PEEK(I+7):I=I+8:RETURN
2700 G=128:FOR M=1 TO 8:GOSUB 2710:?X$;:G=G/2:NEXT
2710 IF K=G OR K>G THEN K=K-G:X$="1":RETURN
2720 X$="0":RETURN

Download programu verzia 1.01:

7led_plus_dp_final1_01n1.txt (3,75 kb)

_________________________________________________

01.02.2023

Nedalo mi, vtedy som po pár dňoch dorobil ešte jeden pomocný program, ktorý vygenerované DATA predchádzajúcimi programami /napríklad ak sme si vygenerovali alfanumeriku/ dokáže skontrolovať - len bacha !, je urobený pre použitie výstupov v poradí uvedenom na začiatku článku /t.j.: Y8=dp Y7=g Y6=f Y5=e Y4=d Y3=c Y2=b Y1=a/, inak sa zobrazia iba nezmyselné znaky.

Takže - k programu je potrebné prihrať DATA riadky ktoré chceme skontrolovať.

 

Program:


1000 PD=30000:Q=0
1005 FOR G=PD TO PD+31:READ M:POKE G,M:Q=Q+M:NEXT
1010 ? CHR$(12):? SPC(8)"Igi(c)01.02.2021":GOSUB 9000
1015 ? SPC(5)"SBC6502 or Micro UK101":GOSUB 9005
1020 ?SPC(12)"32kB/RAM":? "name:"C$
1030 IF Q<>CRC OR ID<>32 THEN ? "CRC or ID error !":END
1040 ? SPC(4)"(CA) or (CC) LED or (E)nd";:INPUT Q$
1045 IF Q$="E" THEN 7006
1050 IF Q$="CA" OR Q$="CC" THEN 1080
1060 GOTO 1040
1080 FOR F=PD TO PD+31:M=PEEK(F)
1090 ? CHR$(12)
1100 ? Q$,"address:","content:"
1110 ? "byte no.",F-PD"dec",M"dec":?
1120 IF Q$="CA" THEN K=255-M
1130 IF Q$="CC" THEN K=M
2000 P$="N":IF K>=128 THEN K=K-128:P$="Y"
2210 G$="N":IF K>=64 THEN K=K-64:G$="Y"
2220 F$="N":IF K>=32 THEN K=K-32:F$="Y"
2230 E$="N":IF K>=16 THEN K=K-16:E$="Y"
2240 D$="N":IF K>=8 THEN K=K-8:D$="Y"
2250 C$="N":IF K>=4 THEN K=K-4:C$="Y"
2260 B$="N":IF K>=2 THEN K=K-2:B$="Y"
2270 A$="N":IF K>=1 THEN K=K-1:A$="Y"
2510 IF A$="Y" THEN ? "  *****"
2515 IF A$="N" THEN ? "  ....."
2520 FOR S=1 TO 3
2525 IF F$="Y" AND B$="Y" THEN ? " *     *"
2530 IF F$="N" AND B$="N" THEN ? " .     ."
2535 IF F$="Y" AND B$="N" THEN ? " *     ."
2540 IF F$="N" AND B$="Y" THEN ? " .     *"
2545 NEXT
2550 IF G$="Y" THEN ? "  *****"
2555 IF G$="N" THEN ? "  ....."
2560 FOR S=1 TO 3
2565 IF E$="Y" AND C$="Y" THEN ? " *     *"
2570 IF E$="N" AND C$="N" THEN ? " .     ."
2575 IF E$="Y" AND C$="N" THEN ? " *     ."
2580 IF E$="N" AND C$="Y" THEN ? " .     *"
2585 NEXT
2590 IF D$="Y" AND P$="Y" THEN ? "  ***** *"
2595 IF D$="N" AND P$="N" THEN ? "  ..... ."
2600 IF D$="Y" AND P$="N" THEN ? "  ***** ."
2605 IF D$="N" AND P$="Y" THEN ? "  ..... *"
6800 REM
6965 ?
6980 IF F=PD+31 THEN ? " (E)nd or (M)enu";:INPUT N$
6982 IF F=PD+31 AND N$="E" THEN 7006
6984 IF F=PD+31 AND N$="M" THEN RUN
6986 IF F=PD+31 THEN 6980
6990 ? " (N)ext";:INPUT N$:IF N$="N" THEN 7000
6995 GOTO 6990
7000 NEXT
7006 ?"OK":END


7LED_tester_ok.txt (1,86 kb)

 

Prikladám sem dva súbory na testovanie:

 

              Common anode (CA):
          

           Data hex:
            0000:C0 F9 A4 B0 99 92 82 F8 80 90 88 83 A7 A1 86 8E
            0010:42 8B F1 0F C7 48 AB A3 8C 23 AF 87 C1 09 91 FF
          

           Data dec:

            9000 C$="PROM 74188 IGI ALFANUM CA":ID=32:RETURN
            9001 DATA 192,249,164,176,153,146,130,248
            9002 DATA 128,144,136,131,167,161,134,142
            9003 DATA 66,139,241,15,199,72,171,163
            9004 DATA 140,35,175,135,193,9,145,255

            9005 CRC=4754:RETURN:REM CRC in (dec) form !

 

           Common cathode (CC):


           Data hex:
            0000:3F 06 5B 4F 66 6D 7D 07 7F 6F 77 7C 58 5E 79 71
            0010:BD 74 0E F0 38 B7 54 5C 73 DC 50 78 3E F6 6E 00


           Data dec:

            9000 C$="PROM 74188 IGI ALFANUM CC":ID=32:RETURN
            9001 DATA 63,6,91,79,102,109,125,7
            9002 DATA 127,111,119,124,88,94,121,113
            9003 DATA 189,116,14,240,56,183,84,92
            9004 DATA 115,220,80,120,62,246,110,0

            9005 CRC=3406:RETURN:REM CRC in (dec) form !

 

Tieto dva uvedené programy (mimo iného) nájdete na tomto mieste :

http://blog.3b2.sk/igi/post/SBC6502-37-PROM-74188-obsahy-contens-part-1_2.aspx


Vlastný program pre zobrazenie nachystaných dát pre zobrazovanie na sedemsegmentovke LED, nezabudnite zvoliť správne nastavenie pre zobrazenie, teda buď sa používa spoločná anóda /CA/ alebo spoločná katóda /CC/.

 

Igiho alfanumerický displej pre sedemsegmentovú LED.

Takto potom vyzerá alfanumerický displej pre sedemsegmentovku,

platí pre použitie v zapojení CA a tiež pre CC.

_________________________________________________

Vaše hodnotenie, Rate post:

01_2023 Blog, Notes.

By Administrator at januára 12, 2023 13:10
Filed Under: Blog

12.01.2023

Zase jeden z Basic-ových programov pre môjho obľúbenca - SBC6502:

SBC6502 - 61 - basic programs - Eratosthenovo sito. Sieve of Eratosthenes.

____________________________________________________

17.01.2023

Niekomu stálo za to urobiť DDOS útok na moje stránky, takže sa ospravedlňujem za dnešný niekoľkohodinový výpadok stránok.

__________________________________________________________

27.01.2023

Vytiahol som jeden z mojich pomocných programov pre SBC6502 a PROM 74188:

SBC6502 - 62 - basic programs. 7segments LED plus dp.

____________________________________________________

Vaše hodnotenie, Rate post:

SBC6502 - 61 - basic programs - Eratosthenovo sito. Sieve of Eratosthenes.

By Administrator at januára 12, 2023 13:06
Filed Under: SBC6502

Ďalší zo zaujímavých programov v jazyku Basic pre 8-bity. Eratosthenovo sito je algoritmus pre nájdenie všetkých prvočísel menších ako zadaná horná hranica. Algoritmus je pomenovaný po gréckom matematikovi Eratosthenovi, ktorý žil v rokoch 276–194 pred Kr.

Algoritmus funguje na postupnom „presievaní“ zoznamu čísel – na začiatku zoznam obsahuje všetky čísla v danom rozsahu (2, 3, 4, …, zadané maximum). Potom sa opakovane prvé číslo zo zoznamu vyberie, toto číslo je prvočíslom; zo zoznamu sa potom odstránia všetky násobky tohto čísla (to sú zložené čísla). Tak sa pokračuje až dovtedy, kým sa zo zoznamu neodstráni posledné číslo (alebo dovtedy, keď je ako prvočíslo označené číslo vyššie ako odmocnina najvyššieho čísla – v tomto prípade všetky zostávajúce čísla v zozname sú určite prvočísla).

 

Obrázok pochádza z Wikimedia Commons.

Tento súbor /obrázok/ podlieha licencii:

Creative Commons Attribution-Share Alike 3.0 Unported


Príklad pre nájdenie prvočísel medzi prvými 20 číslami :

Krok 1: Zoznam obsahuje všetky čísla v rozsahu 2–20:

    Zoznam: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Krok 2: Odoberieme prvé číslo zo zoznamu a označíme ho ako prvočíslo:

    Známe prvočísla: 2
    Zoznam: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Krok 3: Odoberieme zo zoznamu všetky násobky práve odobratého prvočísla:

    Známe prvočísla: 2
    Zoznam: 3 5 7 9 11 13 15 17 19

Krok 4: Pokračujeme opäť bodom 2, pokiaľ ostávajú nejaké čísla :

    Známe prvočísla: 2 3
    Zoznam: 5 7 11 13 17 19

    Známe prvočísla: 2 3 5
    Zoznam: 7 11 13 17 19

    5 je vyšší než ?19, takže ostávajú už iba prvočísla.

Výsledný zoznam prvočísel v rozsahu 2–20: 2, 3, 5, 7, 11, 13, 17, 19.


Základné informácie sú prevzaté z: 

https://sk.wikipedia.org/wiki/Eratostenovo_sito

___________________________________________________________


Vlastný program:

je prevzatý a iba mierne upravený pre možnosti SBC6502 /maximum je S=89 namiesto S=100, je k dispozícii príliš malá RAM/ zo stránky:

https://www.xenesis.jp/2022/05/sieve-fp-basic/


 100 S=89
 110 M=S*S
 120 DIM P(M)
 130 ? "INIT TABLE"
 140 FOR I=2 TO M
 150 P(I)=1
 160 NEXT I
 170 ? "SIEVE CALC"
 180 FOR I=2 TO S
 190 IF P(I) <> 1 THEN GOTO 240
 200 ? I; ",";
 210 FOR J=I TO M/I
 220 P(I*J)=0
 230 NEXT J
 240 NEXT I
 244 ?
 250 ?
 260 ? "PRIME NUMBERS"
 270 FOR I=2 TO M
 280 IF P(I)=1 THEN ? I; ",";
 290 NEXT I

 

Download programu:

Erastothenes1.txt (358,00 bytes)

 

nasleduje skrátená verzia uvedeného programu, tu sú už riadky "zrazené" k sebe:


 100 S=89:M=S*S:DIM P(M):? "INIT TABLE"
 140 FOR I=2 TO M:P(I)=1:NEXT I:? "SIEVE CALC"
 180 FOR I=2 TO S:IF P(I) <> 1 THEN GOTO 240
 200 ? I; ",";:FOR J=I TO M/I:P(I*J)=0:NEXT J
 240 NEXT I:?:?:? "PRIME NUMBERS"
 270 FOR I=2 TO M:IF P(I)=1 THEN ? I; ",";

 290 NEXT I

 

Download programu:

Erastothenes2.txt (274,00 bytes)

 

Prvá časť výpisu v terminálovom okne, pokračuje až po ...


číslo 7919 ...

 

Program je naozajstným "žrútom" dostupnej RAM:

Max. možné je použiť číslo S=89 v riadku č.100, pri 32kB RAM SBC6502 potom zostáva už iba 254 voľných byte RAM.

Asi je dobré popísať metodiku merania času:

Doba výpočtu na SBC6502 (x-tal = 4.9152MHz), meria sa po zobrazení čísla 89 na displeji = 23.4sec

/v časti SIEVE CALC, nazvem to medzičasom/

Ak zarátame ďalší výpis čísiel od PRIME NUMBERS po 7919, tak celkový čas behu programu = 32sec


/Tu by sa hodilo mať RAM v SBC6502 rozšírenú na väčšiu hodnotu  - 40kB alebo 46kB RAM ..., po programe pre kontrolu checksum OS je to asi len  druhý prípad kedy to konštatujem./

Poznámka:
V prípade skráteného zápisu pri použití S=89 zostáva voľných 302 byte RAM, doba výpočtu sa skráti o cca 0.7sec.

_____________________________________________________________

Vaše hodnotenie, Rate post:

Info o autorovi

Volám sa Igor Gramblička, bydlisko: Bratislava, Slovakia. Môj nick: Igi. Blog je o mojich záujmoch, predtým som pracoval ako IT špecialista na počítačové siete a redakčné systémy pre viaceré denníky - až som pred rokmi nakoniec v jednom z nich zakotvil a kde som to potiahol až do konca mojej profesnej kariéry.

Rok, mesiac, počet článkov: