Programmera om prisskylt till något annat...

Berätta om dina pågående projekt.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Programmera om prisskylt till något annat...

Inlägg av Marta »

Ytterligare en stor prisskylt av samma typ som Skogen och Former Mazda också bygger om. Jag avser att behålla hårdvaran som den är och programmera om befintliga MCU's med egen programvara.

Har bara hunnit se lite som hastigast på korten. Styrkortet har en PIC18F2520 med 20MHz kristall. Denna är en hyfsat kraftfull sak med 16K programsteg och 1.5k RAM. Finns en stiftlist på kortet, kanske för att flasha om.

Sifferkorten har en 12F629, 1K programsteg och tämligen lite RAM. Vpp är dessvärre ansluten till en BC-någonting transistor som används som diod med emitter/bas hopkopplade och kollektorn till Vdd. Ingen aning varför denna finns där, den förhindrar i varje fall att lägga på 12V för att flasha MCU'n. Får skära en linje på kortet, den är lätt att skarva efteråt.

Skall givetvis försöka läsa av kretsarna som de är, men blir väldigt förvånad om tillverkaren inte har nollat code protect i kretsarnas config word. Kommer det ut något annat än nollor skall det bli intressant att försöka disassemblera det.

Siffrorna drivs från shiftregister avsedda för ändamålet. De har konstant strömutgång där strömmen sätts med ett motstånd. LED sitter i grupper med 1, 2 eller 3 dioder. De med 1 eller 2 har seriemotstånd på 200 eller 100 ohm för att ta upp en del av effekten som annars hamnat i drivkretsarna. Strömmen är 20mA, så 80 eller 40 mW avlastas från drivkretsen per sådan utgång.

Har någon av Er andra ritat upp något schema från korten?

Vill tacka för arbetet med att mappa upp vilken bit som styr vilken LED-grupp. Samt även anslutningskabeln till sifferkorten.
FormerMazda
Inlägg: 6076
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Programmera om prisskylt till något annat...

Inlägg av FormerMazda »

Skulle vara väldigt intressant om du lyckas dissasemblera PICarna och se hur deras seriella protokoll är gjort. :)

I övrigt har jag nog inget mer att bidra med annat än mappningen då, men den har du ju redan sett, eller skogens.
Skogen
Inlägg: 903
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Programmera om prisskylt till något annat...

Inlägg av Skogen »

Marta skrev: 13 april 2023, 13:08:39Har någon av Er andra ritat upp något schema från korten?
Nope, överkurs för min del. Jag är nöjd med att ha fått det att fungera :)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

Nu har jag monterat av styrkort och en siffra och börjat förbereda att göra något av dessa saker.

Har läst av configuration word från sifferkortet och konstaterat att, precis som väntat, Code Protect och Data Protect är båda nollade. Game Over när det gäller att undersöka befintlig programvara. Det är bara till att utföra Bulk Erase och flasha in egen programvara i sifferkorten.
Har inte provat att läsa av något från styrkortet, men skulle bli ytterligt förvånad om det är öppet för avläsning.

Styrkortet är 4-lagers, men bör vara möjligt att följa det som behövs för att konstatera vad pinnarna på dess PIC är anslutna till. Där är en pinne som går parallellt till alla fyra siffrorna och fyra pinnar var och en till en av siffrorna. Siffrornas matning går genom ett motstånd på 100mOhm. En 4052 analog switch väljer vilken som via en OP går till A/D i PIC. Där finns även en okänd vit komponent med en öppning på toppen. Den har ingen text och troligtvis 2 anslutningar. Gissar på en fuktsensor. Hur denna är kopplad samt temperatur-/ljus-sensorerna på de små "punktkorten" är anslutna återstår att följa upp. Finns även en utgång för fläktstyrning.

Kortet är definitivt användbart till såväl klocka som något annat.
Ni som inte använder det till Era projekt, släng det inte i återvinningen. Det är en kraftfull PIC-18 och definitivt användbart även som del i något helt annat.

Nu tar det ett tag att få till ny firmware för sifferkorten. Det här är inget prioriterat projekt.
FormerMazda
Inlägg: 6076
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Programmera om prisskylt till något annat...

Inlägg av FormerMazda »

Denna vita komponent letar jag efter, men det enda jag kan se på mitt kort är den LED som sitter mellan kontakterna X3 och X4.
Spänningssätts kortet så blinkar den, som en jag-lever-puls eller nåt.

Skrivskyddet var väl väntat, men om du spänningssätter kortet och har siffror anslutna på X4-X7 så visas lite siffror i uppstarten, och då går en del trafik ut till dom.
Ifall du vill glänsa kan du ju alltid sniffa och lösa upp protokollet. ;)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

När jag tittar noga så ja, det är en LED. Såg ut precis som ett galler med något luddigt under på bilden jag tog med mobilen för att kunna se något så smått.

Gjorde ett till misstag, gammal och trött som jag är. Läste Config Word bakvänt, men såg sedan att det här kan ju inte stämma. Måste ju vara INTOSC, inte kristall. Läste det sedan rätt, som little endian. HUPP! Code Protect är en etta :) Gjorde en avläsning och det fungerade... Oerhört förvånad. Tur jag upptäckte det innan Bulk Erase. Skall läsa av dataminnet också, det kräver lite firmware till min hembyggda enhet.
FormerMazda
Inlägg: 6076
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Programmera om prisskylt till något annat...

Inlägg av FormerMazda »

Väldigt spännande! :)

Min skylt väntar på bättre tider ändå, så vem vet, kanske tar det ett annat spår nu om du hittar nåt kul? :)
Skogen
Inlägg: 903
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Programmera om prisskylt till något annat...

Inlägg av Skogen »

Marta skrev: 17 april 2023, 12:39:38 Kortet är definitivt användbart till såväl klocka som något annat.
Ni som inte använder det till Era projekt, släng det inte i återvinningen. Det är en kraftfull PIC-18 och definitivt användbart även som del i något helt annat.
Eftersom jag ändå inte begriper mig på det så lär jag inte ha någon användning för det (eller dom små-PIC-arna som jag lött loss).
Skänkes om någon är intresserad.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

Har testat med ett löst sifferkort och det var inga större problem att flasha om befintlig MCU. En transistor använd som diod måste kapas bort för att kunna lägga på Vpp. Funkade OK med bulk erase och Vpp efter Vdd trots att /MCLR är satt som ingång.

Ljusstyrkan är verkligen enorm. En riktig ljussmocka att tända samtliga LED's med 100% styrka. Med c:a 1kHz PWM och 1µs (tror jag, till/från back-to-back) är det fortfarande på gränsen för att ha inomhus på natten.

Har precis börjat försöka disassemblera original firmware i siffrorna. Det lutar åt ny firmware, originalet tänder LED's i grupper och det är ju klart trevligare att kunna styra hårdvarugrupperna var för sig. Har inte kommit så långt ännu som att reda ut hur det är grupperat. Inte hellre kommandona för att sätta dem eller ställa ljusstyrkan.
Det är i varje fall synkron data. Klocka på PIC pinne 5, parallell till alla fyra siffrorna. Klockar troligen in på stigande flank. Data på PIC pinne 4.

Finns det någon de-compiler för PIC, ungefär 15 år gammal kod? Detta är säkert compiler-genererat. Görs onödiga saker och fullständig idiotkod på sina ställen.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

Har kommit en god bit med disassembleringn. Jag svamlade i förra inläget, det är individuellt styrda utgångar. Programmet är gjort för att kunna användas med längre skiftregister. Upp till 12 bytes, 96 bits, kan det nog hantera. Förmodligen i någon display med punktmatris.

Allt är nu disassemblerat utom en matematikblob som endast används för att mangla inställningen för intensitet.

Det kan nog funka med denna originalkod, men då måste intensiteten modifieras i hårdvara och/eller får koden ändras lite. För att bli lagom i ett mörkt rum måste pulserna kortas ner till det yttersta av vad som är möjligt och det kommer originalkoden inte i närheten av. Dessutom är nog strömmen satt onödigt nära AMR, så sannolikheten att led's går sönder är onödigt hög.

Editerar i befintlig post, det är ju en förtydligan av befintlig text, ingen info tas bort och ytterligare en postning blir för tjatig.


Följande är min egen tolkning av hur formatet mellan styrkort och sifferkort ser ut. Den kan innehålla fel och gör det nog också. Det är ännu otestat, Källan är en tolkning av programkoden.

Bitsen klockas in på negativ flank på PIC pinne 5 som är flanktriggad. Data skall in på PIC pinne 4. Klockan ger en interrupt, varefter ingången samplas av programvara. Det finns även en timer som ger interrupts med knappt 0.5ms intervall. Har inte räknat hur lång dess kod är, men måste ju exekvera klart på <0.5ms. Därför måste data hållas kvar längre än som så för att samplas korrekt.

Programmet tycks vara avsett att kunna användas till flera olika siffermoduler. Det kan ta emot 8 eller 12 bytes med displaymönster. Det shiftas ut till drivkretsarna med den först mottagna byten först. Detta sker efter att hela datablocket tagits emot.

Kan nog vara lagom med 1kHz klocka och växla data samtidigt med klockans negativa flank. Data shiftas in med högsta biten först i varje byte. För att markera slut på ett kommando skall klockan hållas kvar på låg nivå under minst 3ms. Ungefär 5 till 10 bör fungera.

Med originalkortet går klockan ut parallellt till alla fyra siffrorna. Data skall hållas låg på de siffror som inte skall ta emot något kommando. Noll är en kommandokod som ignoreras

Det finns tre kommandon:

Sätt displaymönster: 0x53 följt av ytterligare 8 eller 12 bytes. 6 bytes verkar inte finnas. Det blir de 6 sist skickade som kommer att användas på de här aktuella sifferkorten. Detta kommando måste upprepas oftare än varje sekund, annars släcks displayen. Efter 30 sekunder utan detta kommando resetas sifferkortet.

Sätt intensitet: 0x56 följt av en byte intensitetsvärde. Detta manglas på okänt sätt innan det används för PWM av displayen. Räknaren värdet compareras mot räknar från 0 till 0x14 med 0.5ms intervall.

LED-test: 0x5c följt av en byte där bits 2:0 anger bit och de höga bitsen anger byte där aktuell bit släcks. När PWM-räknaren vänder släcks denna bit och tänds på nytt efter 1.5ms. En strömmätning på styrkortet kan då avgöra om led är hel.


Tror det var former mazda som testade lite att mäta på de aktuella signalerna. Kan Du bekräfta eller avfärda att ovanstående är rimligt? Jag är som Ni vet invalid och har stökigt att mäta på dessa klumpiga saker.

Skall koppla in styrkortet, pröva att läsa av det och sedan testa om jag kan få ut något på sifferkorten med dess originalprogram. Det tar ett tag, måst mäta upp hårdvaran för att veta vilka pinnar på PIC som gör vad.
Programmet i styrkortet kommer jag inte att göra någon tolkning av mer än möjligen små fragment, då det är stort och helt ointressant för hobbybruk.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

Här är min preliminära disassemblering och tolkning av programkoden.

Det finns två interruptkällor, klocka för seriell indata och en timer med c:a 0.5ms intervall. Timern används för PWM av ljusstyrkan, samt tidbas för all annan timing i programmet.

Huvudloopen kollar när det gått 3ms sedan senaste klocka och försöker då utföra ett kommando med mottagen data. Den nollställer även watchdog så länge som kommando med displaydata tagits emot de senaste 30s. Efter 1s utan denna data släcker den siffran.

Innan ett kommando används konrolleras att det inte är 0, är jämn byte och minst två bytes har mottagits. Kommandona kollar därefter att längden är ok.

Kommandot för displaydata shiftar ut och latchar denna, samtidigt som varje byte sparas i RAM för att vid behov användas av en testfunktion.

Sättning av intensitet manglar värdet på något sätt innan det används. Har inte försökt tolka manglingen. Talet 5 ingår är allt jag vet om detta... Den som känner sig hågad är välkommen att tolka denna del.

Kommandot för displaytest startar en sekvens där data i drivkretsarnas shiftregister, placerad där av testfunktionen, latchas till utgångarna. Sedan shiftas ursprunglig data ut. Detta görs i två omgångar, troligen för att interrupten inte skall "bita sig i svansen". På tredje interrupt latchas ursprunglig data. Styrkortet kan mäta varje sifferkorts strömförbrukning och genom denna blink detektera om led's är hela.


Den här koden är inte för Microship's helvetesassembler med tungbrytande opkoder och ultrabakvänd addressering. Koden är inte tillhyfsad ännu så den är redo att assemblera. Antar att den är drägligt läsbar trots dessa faktorer.

Några detaljer om assemblern. sbr/sbs=skip bit reset/set, rmb/smb=reset/set memory bit, tfz=test for zero, # är immediate address, a, inte w, är accumulator.

Kod: Markera allt

*               variables, not yet in assembler syntax

$20 intsav.a
$21 bit flags
    0 rxidle    receiving not in
    1 wdtout    set causes watchdog timer to run out
    2 t0ocurd   set when tmr0 int has occured
$22 rx.shreg    shift register
$23 rx.bit      bit storage
$24 rx.bytcnt   byte counter
$25 rx.timer    block ready timer
$26 rx.bitcnt   bits counter
$27 unused0     unused
$28 clrtmr      clear display timer
$29 pwmcnt      tmr0 tick counter for pwm
$2a intens      display intensity
$2b extwdt      extension of watchdog timer
$2c maxptrn     #last accepted pattern bytes
$2d exttmr0     extension of tmr0
$2e-$39 disptrn display pattern
$3a-$46 rxbuf   receive buffer
$47 pad0        scratchpad
$48
$49
$4a txpnt       transmit byte pointer, from main
$4b txbyte      transmitted byte, from main
$4c intsav.statx  extra status intsave
$4d txpnti      transmit byte pointer, from interrupt
$4e txbytei     transmitted byte, from interrupt
$4f tststat     test state
$50 syspad0
$51 syspad1
$55 intsav.status
$56 intsav.iadres
$57 intsav.pclath
$58 syspad2
$59 syspad3
$5a intsav.syspad2
$5b intsav.syspad3
$5c intsav.syspad1
$5d intsav.syspad0




                ******  reset vector
                *
  0000  83 01           stz status              clr status
  0001  00 30           lod a,#$00              clr pclath
  0002  8a 00           lod pclath,a
  0003  56 28           jmp init                jmp to init


                ******  irq transfers here
                *
  0004  a0 00   irqrtn  lod $20,a               irq vector, save a
  0005  03 08           lod a,status            get status..
  0006  83 01           stz status              ..and clear it
  0007  d5 00           lod $55,a               save status
  0008  04 08           lod a,iadres            save iadres
  0009  d6 00           lod $56,a
  000a  0a 08           lod a,pclath            save pclath..
  000b  d7 00           lod $57,a
  000c  8a 01           stz pclath              ..and clear it

                        *                       save some system vars
  000d  50 08           lod a,$50
  000e  dd 00           lod $5d,a
  000f  51 08           lod a,$51
  0010  dc 00           lod $5c,a
  0011  58 08           lod a,$58               adr^ low?
  0012  da 00           lod $5a,a
  0013  59 08           lod a,$59               adr^ high?
  0014  db 00           lod $5b,a

  0015  03 08           lod a,status            get status
  0016  83 12           rmb status,bsela        bank0
  0017  cc 00           lod $4c,a               save status again??


******                  tmr0 irq, 281 counts at 500kHz about 500µs
*
  0018  0b 19           sbr intcon,t0if         timer0 irq..
  0019  8b 1e           sbs intcon,t0ie         ..and enabled?
  001a  21 28           jmp tryinp              no, try nxt

  001b  0b 11           rmb intcon,t0if         is tmr0, clear irq
  001c  19 30           lod a,#$19              re-init tmr0
  001d  81 00           lod tmr0,a
  001e  83 12           rmb status,bsela        bank0
  001f  ad 22           jsr tmr0act             do tmr0 action??
  0020  21 15           smb bitflg.t0ocurd            ??


******                  input clock irq
*
  0021  8b 18   tryinp  sbr intcon,inpif        input irq..
  0022  0b 1e           sbs intcon,inpie        ..and enabled?
  0023  42 28           jmp $0042               no,

  0024  00 30   rxirq   lod a,#$00              is input, assume zero
  0025  85 19           sbr port,mclr           inbit is zero, keep it
  0026  01 30           lod a,#$01              was one
  0027  a3 00           lod rx.bit,a            save received bit
  0028  8b 10           rmb intcon,inpif        clr intflag
  0029  21 10           rmb bitflg,0            signal receive in progress
  002a  a5 01           stz rx.timer            clear block ready timer
  002b  a6 08           tfz rx.bitcnt           first bit in data block?
  002c  03 19           sbr status,z
  002d  a4 01           stz rx.bytcnt           yes, clear byte counter
  002e  22 08           lod a,rx.shreg          left shift in received bit
  002f  22 07           add a,rx.shreg
  0030  23 07           add a,rx.bit
  0031  a2 00           lod rx.shreg,a
  0032  69 30           lod a,#$69              13 byte + 2 bits 106 bits received?
  0033  26 02           sur a,rx.bitcnt
  0034  03 18           sbr status,cy
  0035  42 28           jmp intret              yes, stop counting, rxirq done
  0036  a6 0a           inc rx.bitcnt           count received bits
  0037  26 08           lod a,rx.bitcnt         get #bits
  0038  07 39           and a,#$07              at even byte?
  0039  03 1d           sbs status,z
  003a  42 28           jmp intret              no, rxirq done
  003b  24 08           lod a,rx.bytcnt         get rx adr counter
  003c  3a 3e           add a,#rxbuf            add in base adr
  003d  84 00           lod iadres,a            set address
  003e  22 08           lod a,rx.shreg          get received byte
  003f  80 00           lod idata,a             store it
  0040  a4 0a           inc rx.bytcnt           nxt adr
  0041  a2 01           stz rx.shreg            clear rx shreg
                        *                       fall through to return

******                  return from interrupt
*
  0042  4c 08   intret  lod a,$4c               restore extra save, why??
  0043  83 00           lod status,a
  0044  83 12           rmb status,bsela        bank0
  0045  5d 08           lod a,$5d               restore system vars
  0046  d0 00           lod $50,a
  0047  5c 08           lod a,$5c
  0048  d1 00           lod $51,a
  0049  5a 08           lod a,$5a
  004a  d8 00           lod $58,a
  004b  5b 08           lod a,$5b
  004c  d9 00           lod $59,a

  004d  56 08           lod a,$56               restore regs
  004e  84 00           lod iadres,a
  004f  57 08           lod a,$57
  0050  8a 00           lod pclath,a
  0051  55 08           lod a,$55
  0052  83 00           lod status,a
  0053  a0 0e           swn $20
  0054  20 0e           swn a=$20
  0055  09 00           rti                     irq done


******                  first part of initialization

  0056  22 30   init    lod a,#$22              clear mem from here..
  0057  84 00           lod iadres,a
  0058  4f 30           lod a,#$4f              ..to there
  0059  6c 20           jsr clrmem              do it
  005a  21 30           lod a,#$21              clear mem from here..
  005b  84 00           lod iadres,a
  005c  22 30           lod a,#$22              ..to there
  005d  6c 20           jsr clrmem              do it

  005e  83 01           stz status              clear status
  005f  03 30           lod a,#$03              high from adr of rom table
  0060  d9 00           lod $59,a
  0061  fe 30           lod a,#$fe              low from adr
  0062  d8 00           lod $58,a
  0063  4f 30           lod a,#$4f              to adr in ram
  0064  84 00           lod iadres,a
  0065  50 30           lod a,#$50              end adr in ram
  0066  70 20           jsr romcpy              do it

  0067  83 01           stz status              clr status
  0068  f5 2a           jmp init2               do more init, then enter main loop



******                  clear memory
*                       iadres=start, a=stop, not included
*
  0069  04 06   clrmem1 eor a,iadres    get back stop adr
  006a  80 01           stz idata       do clear
  006b  84 0a           inc iadres      nxt adr
  006c  04 06   clrmem  eor a,iadres    at stop?
  006d  03 1d           sbs status,z
  006e  69 28           jmp clrmem1     no, do nxt byte
  006f  00 34           rtl a,#$00      yes, return zero


******                  copy from rom table to ram
*                       $58/59=romadr low/high, iadres=to adr, a=end adr in ram
*
  0070  d0 00 romcpy    lod $50,a               save end adr
  0071  7b 20 .nxt      jsr $007b               read from rom table
  0072  80 00           lod idata,a             put read data
  0073  84 0a           inc iadres              nxt adr
  0074  04 08           lod a,iadres            at end?
  0075  50 06           eor a,$50
  0076  03 19           sbr status,z
  0077  00 34           rtl a,#$00              yes, return zero
  0078  71 28           jmp .nxt                no, do nxt bt


******                  read from rom table, inc rom adr
*                       enter at tblread, $58/59=romadr low/high, inc's romadr
*
  0079  83 12           rmb status,bsela
  007a  d8 00           lod $58,a
  007b  d9 1b tblread   sbr $59,7               top bit set, why??
  007c  84 28           jmp $0084               yes
  007d  59 08           lod a,$59               set high bt
  007e  8a 00           lod pclath,a
  007f  58 08           lod a,$58               get low adr
  0080  d8 0a           inc $58                 inc low adr
  0081  03 19           sbr status,z            fold over?
  0082  d9 0a           inc $59                 yes, inc high adr
  0083  82 00           lod pcl,a               do a read and return


******                  read from ram, inc ram adr
*                       $58/59=ramadr low/high, inc's ramadr
*
  0084  83 13   ramread rmb status,irp          set iadres bank 0
  0085  59 18           sbr $59,0               adr in bank 1?
  0086  83 17           smb status,irp          set iadres bank 1
  0087  58 08           lod a,$58               get low adr
  0088  d8 0a           inc $58                 inc ramadr
  0089  84 00           lod iadres,a            set adr^
  008a  00 08           lod a,idata             get dat
  008b  08 00           rts                     done


******                  a large unused block
*
  008c  ff 3f           add a,#$ff
  008d  ff 3f           add a,#$ff
* a lot of blanks removed
  021a  ff 3f           add a,#$ff
  021b  ff 3f           add a,#$ff


******                  init port
*
  021c  07 30   iniport lod a,#$07              comparators off
  021d  83 12           rmb status,bsela        bank0
  021e  99 00           lod cmcon,a             set comparator mode
  021f  cc 30           lod a,#$cc              pin 4/5, bit 3/4 as inputs
  0220  83 16           smb status,bsela        bank1
  0221  85 00           lod tris,a              set tris
  0222  e0 30           lod a,#$e0              rise enable, lower data clk latch
  0223  83 12           rmb status,bsela        bank0
  0224  85 00           lod port,a              set port
  0225  08 00           rts                     done


******                  clear all of display and pattern memory
*                       does it for 13 bytes, 6 is needed
*
  0226  83 12   clrall  rmb status,bsela        bank 0
  0227  c7 01           stz $47                 init byte counter
  0228  47 08   .nxt    lod a,$47               get counter
  0229  2e 3e           add a,#disptrn              add in base adr
  022a  84 00           lod iadres,a            clear display memory
  022b  80 01           stz idata
  022c  00 30           lod a,#$00              get zero == all LED's off
  022d  83 12           rmb status,bsela        bank0
  022e  72 22           jsr shftout             do output
  022f  c7 0a           inc $47                 nxt display pos
  0230  0c 30           lod a,#$0c              end count, inclusive
  0231  47 02           sur a,$47               at end?
  0232  03 1c           sbs status,cy
  0233  28 2a           jmp $0228               no, do nxt
  0234  05 16           smb port,latch          yes, shake latch
  0235  05 12           rmb port,latch
  0236  08 00           rts                     done



******                  shift out one byte
*                       another one using another storage address $4e...
*                       a=byte to shift out, bit7 goes first
*
                shftouti
  0237  83 12           rmb status,bsela        bank0
  0238  ce 00           lod $4e,a               keep byte
  0239  ce 1f           sbs $4e,7               bit7 set?
  023a  3d 2a           jmp $023d               no
  023b  85 14           smb port,shdata         yes, 1 to data
  023c  3e 2a           jmp $023e               go shake clk
  023d  85 10           rmb port,shdata         0 to data
  023e  05 14           smb port,shclk          shake clk
  023f  05 10           rmb port,shclk
  0240  4e 1f           sbs $4e,6               do rest of bits the same stupid way
  0241  44 2a           jmp $0244
  0242  85 14           smb port,shdata
  0243  45 2a           jmp $0245
  0244  85 10           rmb port,shdata
  0245  05 14           smb port,shclk
  0246  05 10           rmb port,shclk
  0247  ce 1e           sbs $4e,5
  0248  4b 2a           jmp $024b
  0249  85 14           smb port,shdata
  024a  4c 2a           jmp $024c
  024b  85 10           rmb port,shdata
  024c  05 14           smb port,shclk
  024d  05 10           rmb port,shclk
  024e  4e 1e           sbs $4e,4
  024f  52 2a           jmp $0252
  0250  85 14           smb port,shdata
  0251  53 2a           jmp $0253
  0252  85 10           rmb port,shdata
  0253  05 14           smb port,shclk
  0254  05 10           rmb port,shclk
  0255  ce 1d           sbs $4e,3
  0256  59 2a           jmp $0259
  0257  85 14           smb port,shdata
  0258  5a 2a           jmp $025a
  0259  85 10           rmb port,shdata
  025a  05 14           smb port,shclk
  025b  05 10           rmb port,shclk
  025c  4e 1d           sbs $4e,2
  025d  60 2a           jmp $0260
  025e  85 14           smb port,shdata
  025f  61 2a           jmp $0261
  0260  85 10           rmb port,shdata
  0261  05 14           smb port,shclk
  0262  05 10           rmb port,shclk
  0263  ce 1c           sbs $4e,1
  0264  67 2a           jmp $0267
  0265  85 14           smb port,shdata
  0266  68 2a           jmp $0268
  0267  85 10           rmb port,shdata
  0268  05 14           smb port,shclk
  0269  05 10           rmb port,shclk
  026a  4e 1c           sbs $4e,0
  026b  6e 2a           jmp $026e
  026c  85 14           smb port,shdata
  026d  6f 2a           jmp $026f
  026e  85 10           rmb port,shdata
  026f  05 14           smb port,shclk
  0270  05 10           rmb port,shclk
  0271  08 00           rts                     done


******                  shift out one byte
*                       this one uses adr $4b
*                       a=byte to shift out, bit7 goes first
*
  0272  83 12   shftout rmb status,bsela        bank0
  0273  cb 00           lod $4b,a               keep byte
  0274  cb 1f           sbs $4b,7               bit7 set?
  0275  78 2a           jmp $0278               no
  0276  85 14           smb port,shdata         yes, 1 to data
  0277  79 2a           jmp $0279               go shake clk
  0278  85 10           rmb port,shdata         0 to data
  0279  05 14           smb port,shclk          shake clk
  027a  05 10           rmb port,shclk
  027b  4b 1f           sbs $4b,6               do rest of bits the same stupid way
  027c  7f 2a           jmp $027f
  027d  85 14           smb port,shdata
  027e  80 2a           jmp $0280
  027f  85 10           rmb port,shdata
  0280  05 14           smb port,shclk
  0281  05 10           rmb port,shclk
  0282  cb 1e           sbs $4b,5
  0283  86 2a           jmp $0286
  0284  85 14           smb port,shdata
  0285  87 2a           jmp $0287
  0286  85 10           rmb port,shdata
  0287  05 14           smb port,shclk
  0288  05 10           rmb port,shclk
  0289  4b 1e           sbs $4b,4
  028a  8d 2a           jmp $028d
  028b  85 14           smb port,shdata
  028c  8e 2a           jmp $028e
  028d  85 10           rmb port,shdata
  028e  05 14           smb port,shclk
  028f  05 10           rmb port,shclk
  0290  cb 1d           sbs $4b,3
  0291  94 2a           jmp $0294
  0292  85 14           smb port,shdata
  0293  95 2a           jmp $0295
  0294  85 10           rmb port,shdata
  0295  05 14           smb port,shclk
  0296  05 10           rmb port,shclk
  0297  4b 1d           sbs $4b,2
  0298  9b 2a           jmp $029b
  0299  85 14           smb port,shdata
  029a  9c 2a           jmp $029c
  029b  85 10           rmb port,shdata
  029c  05 14           smb port,shclk
  029d  05 10           rmb port,shclk
  029e  cb 1c           sbs $4b,1
  029f  a2 2a           jmp $02a2
  02a0  85 14           smb port,shdata
  02a1  a3 2a           jmp $02a3
  02a2  85 10           rmb port,shdata
  02a3  05 14           smb port,shclk
  02a4  05 10           rmb port,shclk
  02a5  4b 1c           sbs $4b,0
  02a6  a9 2a           jmp $02a9
  02a7  85 14           smb port,shdata
  02a8  aa 2a           jmp $02aa
  02a9  85 10           rmb port,shdata
  02aa  05 14           smb port,shclk
  02ab  05 10           rmb port,shclk
  02ac  08 00           rts                     done


******                  tmr0 interrupt activity
*
  02ad  14 30   tmr0act lod a,#$14              intensity counter foldover limit
  02ae  83 12           rmb status,bsela        bank0
  02af  a9 0a           inc pwmcnt              count tmr0 ticks
  02b0  29 02           sur a,pwmcnt            count past limit?
  02b1  03 18           sbr status,cy
  02b2  a9 01           stz pwmcnt              yes, reset it
  02b3  2a 08           lod a,intens            get intensity value
  02b4  29 02           sur a,pwmcnt            counter past intensity?
  02b5  03 18           sbr status,cy
  02b6  b9 2a           jmp $02b9               yes
  02b7  85 12           rmb port,enable         no, turn on led's
  02b8  e8 2a           jmp tester              pwm done
  02b9  85 16           smb port,enable         turn off led's
  02ba  e8 2a           jmp tester              pwm done


******                  shift out display ram to led's
*                       6 bytes start at $2e are shifted out
*                       latching done before shifts
*                       done in every first pwm period
*
  02bb  a9 08   t0      tfz pwmcnt              first in pwm period?
  02bc  03 1d           sbs status,z
  02bd  08 00           rts                     no-hold test
  02be  05 16           smb port,latch          shake latch turning off tested led
  02bf  05 12           rmb port,latch
  02c0  cd 01           stz $4d                 init byte counter
  02c1  4d 08   .nxt    lod a,$4d               get byte counter
  02c2  2e 3e           add a,#disptrn          add in base adr
  02c3  84 00           lod iadres,a
  02c4  00 08           lod a,idata             get data
  02c5  83 12           rmb status,bsela        bank0
  02c6  37 22           jsr shftouti            shift out to display
  02c7  cd 0a           inc $4d                 nxt byte
  02c8  06 30           lod a,#$06              first 6 byytes to do
  02c9  4d 02           sur a,$4d               done?
  02ca  03 1c           sbs status,cy
  02cb  c1 2a           jmp .nxt                no, do nxt
  02cc  cf 01           stz tststat                 nxt test state is #1
  02cd  cf 0a           inc tststat
  02ce  08 00           rts                     done

  02cf  06 30   t1      lod a,#$06              start cnt at last 6 bytes
  02d0  cd 00           lod $4d,a               init byte counter
  02d1  2c 08   .nxt    lod a,maxptrn           done or no 2:nd digit present?
  02d2  4d 02           sur a,$4d
  02d3  03 18           sbr status,cy
  02d4  dd 2a           jmp .done               yes, exit
  02d5  4d 08           lod a,$4d               get byte counter
  02d6  2e 3e           add a,#disptrn              add in base adr
  02d7  84 00           lod iadres,a
  02d8  00 08           lod a,idata             get data
  02d9  83 12           rmb status,bsela        bank0
  02da  37 22           jsr shftouti            shift out to display
  02db  cd 0a           inc $4d                 nxt byte
  02dc  d1 2a           jmp .nxt                do nxt
  02dd  02 30   .done   lod a,#$02              nxt test state is #2
  02de  cf 00           lod tststat,a
  02df  08 00           rts                     done

  02e0  05 16   t2      smb port,latch          shake latch
  02e1  05 12           rmb port,latch
  02e2  03 30           lod a,#$03              nxt test state is #3 == idle
  02e3  cf 00           lod tststat,a
  02e4  08 00           rts                     done

  02e5  03 30   test00  lod a,#$03              re-init
  02e6  cf 00           lod tststat,a
  02e7  08 00           rts                     done

  02e8  4f 08   tester  lod a,tststat               get test state
  02e9  03 19           sbr status,z            state 0?
  02ea  bb 2a           jmp dis0out             yes, display output #0
  02eb  01 3a           eor a,#$01              routine #1?
  02ec  03 19           sbr status,z
  02ed  cf 2a           jmp dis1out             routine #1, only shift output #1
  02ee  03 3a           eor a,#$03              routine #2?
  02ef  03 19           sbr status,z
  02f0  e0 2a           jmp latchit             routine #2, shake strobe
  02f1  01 3a           eor a,#$01              garbage?
  02f2  03 19           sbr status,z
  02f3  08 00           rts                     no, done
  02f4  e5 2a           jmp test00              garbage, re-init


  02f5  83 12   init2   rmb status,bsela        bank 0
  02f6  ff 23           jsr $03ff               get value for osccal
  02f7  83 16           smb status,bsela        bank1
  02f8  90 00           lod osccal,a            set osccal
  02f9  40 30           lod a,#$40              wpu on, rising edge int, ..
                        *                       ..int clk for tmr0, rising edge ..
                        *                       ..presc on tmr0, divide by 2
  02fa  81 00           lod option,a            set option
  02fb  37 30           lod a,#$37              wpu on all, but not pin4/bit3
  02fc  95 00           lod wpu,a               set wpu
  02fd  30 30           lod a,#$30              gie off, peie off, t0nt on, extint on
                        *                       ioc off, tmr0 extint ioc flags clear
  02fe  8b 00           lod intcon,a            set intcon
  02ff  64 00           cwt                     reset watchdog
  0300  83 12           rmb status,bsela        bank0
  0301  1c 22           jsr iniport             prepare port for use
  0302  21 11           rmb bitflg.t0ocurd            init ram ??
  0303  21 14           smb bitflg,0
  0304  a9 01           stz pwmcnt
  0305  aa 01           stz intens              display intensity
  0306  a7 01           stz $27
  0307  ad 01           stz exttmr0
  0308  a6 01           stz rx.bitcnt
  0309  a5 01           stz rx.timer            rx block ready timer
  030a  0c 30           lod a,#$0c
  030b  ac 00           lod maxptrn,a
  030c  19 30           lod a,#$19              set tmr0 timeout
  030d  81 00           lod tmr0,a
  030e  64 00           cwt                     reset watchdog
  030f  26 22           jsr clrall              blank display and display ram
  0310  a1 10           rmb bitflg.wdtout       ext. watchdog not pending to expire
  0311  8b 17           smb intcon,gie          turn on irq
                        *                       init done fall through to main loop

                        receive timeout 3ms
                        clear timeout 1s
                        wdt timeout 30s
                        set pattern 0x53
                        set intensity 0x56
                        clear a segment 0x5c

******                  main loop
*
  0312  a1 1c   main    sbs bitflg.wdtout       ??
  0313  64 00           cwt                     reset watchdog
  0314  21 1d           sbs bitflg.t0ocurd      has tmr0 interrupt occured?
  0315  37 2b           jmp .idle               no
  0316  21 11           rmb bitflg.t0ocurd      yes, clr flag
  0317  ad 0a           inc exttmr0             count timer interrupts
  0318  fa 30           lod a,#$fa              get limit, 125ms
  0319  2d 02           sur a,exttmr0           limit reached?
  031a  03 1c           sbs status,cy
  031b  24 2b           jmp $0324               no, not timed out
  031c  ad 01           stz exttmr0             reset timeout counter
  031d  a8 08           tfz clrtmr              clear timer expired?
  031e  03 19           sbr status,z
  031f  21 2b           jmp @+2                 compilers...
  0320  a8 03           dec clrtmr              no, count it down
  0321  ab 08           tfz extwdt              extended watchdog timeout?
  0322  03 1d           sbs status,z
  0323  ab 03           dec extwdt              no, count it down
  0324  21 18   .noto   sbr bitflg,0            receiving?
  0325  37 2b           jmp .idle               no
  0326  a5 0a           inc rx.timer            count up rx block ready timer
  0327  05 30           lod a,#$05              time to execute received command?
  0328  25 02           sur a,rx.timer
  0329  03 1c           sbs status,cy
  032a  37 2b           jmp .idle               no
  032b  26 08           lod a,rx.bitcnt         yes, get #bits received
  032c  07 39           and a,#$07              even bytes?
  032d  03 1d           sbs status,z
  032e  34 2b           jmp .rxclr              no, discard and reset rx
  032f  10 30           lod a,#$10              at least 16 bits received?
  0330  26 02           sur a,rx.bitcnt
  0331  83 12           rmb status,bsela        bank0
  0332  03 18           sbr status,cy           less than 16 bits, discard and reset
  0333  3f 23           jsr trycmd              got a command, try to do it
  0334  ba 01   .rxclr  stz $3a                 clear command byte
  0335  21 14           smb bitflg,0            signal no rxclocks received
  0336  a6 01           stz rx.bitcnt           reset receive bit counter
  0337  28 0b   .idle   dsz a=clrtmr               clear timer expired?
  0338  3b 2b           jmp .noclr
  0339  83 12           rmb status,bsela        bank0
  033a  26 22           jsr clrall              clear display
  033b  2b 0b   .noclr   dsz a=extwdt           extended wdt expired?
  033c  12 2b           jmp main                no, repeat main loop
  033d  a1 14           smb bitflg.wdtout       yes, let watchdog time out
  033e  12 2b           jmp main                repeat main loop

  033f  83 12   trycmd  rmb status,bsela
  0340  ca 01           stz $4a
  0341  c9 01           stz $49
  0342  c8 01           stz $48
  0343  bb 2b           jmp disptch


******                  command 0x53
*                       set display pattern and display it
*                       first byte sent is command,
*                       other 12 or 8 is display pattern
*                       last 6 are shown on the led's
*
  0344  26 08   setptrn lod a,rx.bitcnt         get #bits received
  0345  68 3a           eor a,#$68              104 bits = 13 bytes?
  0346  03 19           sbr status,z
  0347  4c 2b           jmp $034c               yes, set display pattern
  0348  26 08           lod a,rx.bitcnt         get #bits received
  0349  48 3a           eor a,#$48              72 bits = 9 bytes?
  034a  03 1d           sbs status,z
  034b  08 00           rts                     no, just return

  034c  26 08           lod a,rx.bitcnt         get #bits received
  034d  d0 00           lod $50,a               init counter
  034e  03 10           rmb status,cy           /8 for #bits to #bytes
  034f  d0 0c           ror $50
  0350  03 10           rmb status,cy
  0351  d0 0c           ror $50
  0352  03 10           rmb status,cy
  0353  50 0c           ror a=$50               compiler crazyness...
  0354  d0 00           lod $50,a
  0355  50 03           dec a=$50               -1 for command byte
  0356  ac 00           lod maxptrn,a           set #used pattern bytes
  0357  ca 01           stz $4a                 init counter
  0358  2c 08   .nxt    lod a,maxptrn           get limit
  0359  4a 02           sur a,$4a               done?
  035a  03 18           sbr status,cy
  035b  6e 2b           jmp .finish             yes
  035c  4a 0a           inc a=$4a               get offset +1 = skip command byte
  035d  3a 3e           add a,#rxbuf            add in base adr to received bytes
  035e  84 00           lod iadres,a            set adr
  035f  00 08           lod a,idata             get data
  0360  d0 00           lod $50,a               keep it
  0361  4a 08           lod a,$4a               get offset
  0362  2e 3e           add a,#disptrn          add in base adr to display pattern
  0363  84 00           lod iadres,a            set adr
  0364  50 08           lod a,$50               get data and..
  0365  80 00           lod idata,a             ..set display pattern
  0366  4a 08           lod a,$4a               compiler crazy, get offset
  0367  2e 3e           add a,#disptrn          add inbase adr to display pattern
  0368  84 00           lod iadres,a            set adr
  0369  00 08           lod a,idata             get just stored data
  036a  83 12           rmb status,bsela        bank0
  036b  72 22           jsr shftout             shift it out to display
  036c  ca 0a           inc $4a                 nxt byte
  036d  58 2b           jmp .nxt                do nxt
  036e  05 16   .finish smb port,latch          shake strobe
  036f  05 12           rmb port,latch
  0370  08 30           lod a,#$08              reset display clear timer
  0371  a8 00           lod clrtmr,a
  0372  f0 30           lod a,#$f0              reset extended watchdog
  0373  ab 00           lod extwdt,a
  0374  08 00           rts                     done


******                  command 0x56, set intensity
*                       set intensity
*
  0375  26 08   setint  lod a,rx.bitcnt         get #bits received
  0376  10 3a           eor a,#$10              16 bits?
  0377  03 1d           sbs status,z
  0378  08 00           rts                     no, just return
  0379  05 30           lod a,#$05              mangling constant
  037a  d1 00           lod $51,a
  037b  3b 08           lod a,$3b               get value
  037c  c8 23           jsr magic               mangle it
  037d  aa 00           lod intens,a            set intensity
  037e  08 00           rts


******                  command 0x5c
*                       test a led output
*                       turn off a led in display pattern,
*                       2:nd received byte, 2:0 = bit, 6:3 = byte in disptrn
*                       shifts out new attern, then restores it at disptrn
*
  037f  26 08   ledtest lod a,rx.bitcnt         get #bits received
  0380  10 3a           eor a,#$10              16 bits?
  0381  03 1d           sbs status,z
  0382  08 00           rts                     no, just return
  0383  3b 08           lod a,$3b               get #1 received byte
  0384  d0 00           lod $50,a               right shift 3 bits
  0385  03 10           rmb status,cy
  0386  d0 0c           ror $50
  0387  03 10           rmb status,cy
  0388  d0 0c           ror $50
  0389  03 10           rmb status,cy
  038a  50 0c           ror a=$50
  038b  c9 00           lod $49,a               save right shifted value = offset
  038c  3b 08           lod a,$3b               get #1 received byte again
  038d  07 39           and a,#$07              mask out 3 lowest bits
  038e  c8 00           lod $48,a               save them = bitmask
  038f  0c 30           lod a,#$0c              offset in range ?
  0390  49 02           sur a,$49
  0391  03 18           sbr status,cy
  0392  08 00           rts                     no, return
  0393  49 08           lod a,$49               get offset
  0394  2e 3e           add a,#disptrn          add in base adr
  0395  84 00           lod iadres,a            set adr
  0396  00 08           lod a,idata             get and..
  0397  c7 00           lod $47,a               ..keep byte
  0398  49 08           lod a,$49               get offset
  0399  2e 3e           add a,#disptrn          add in base adr
  039a  84 00           lod iadres,a            set adr

  039b  80 30           lod a,#$80              init bit to shift
  039c  d0 00           lod $50,a
  039d  48 08           lod a,$48               get lower 3 bits..
  039e  d1 00           lod $51,a               ..save them..
  039f  d1 0a           inc $51                 ..as 1-relative number
  03a0  a3 2b           jmp .shift              go shifting down $50
  03a1  03 10   .nxtsh  rmb status,cy           do shift
  03a2  d0 0c           ror $50
  03a3  d1 0b   .shift  dsz $51                 shifts done?
  03a4  a1 2b           jmp .nxtsh
  03a5  50 09           not a=$50               get inverted bit pattern
  03a6  80 05           and idata,a             turn off selected bit

  03a7  ca 01           stz $4a                 init byte counter
  03a8  2c 08   .nxtout lod a,maxptrn           get limit
  03a9  4a 02           sur a,$4a               at end?
  03aa  03 18           sbr status,cy
  03ab  b4 2b           jmp .finish             yes
  03ac  4a 08           lod a,$4a               get counter
  03ad  2e 3e           add a,#disptrn          add in base adr
  03ae  84 00           lod iadres,a            set adr
  03af  00 08           lod a,idata             get data
  03b0  83 12           rmb status,bsela        bank0
  03b1  72 22           jsr shftout             shift out data
  03b2  ca 0a           inc $4a                 nxt byte
  03b3  a8 2b           jmp .nxtout             do nxt
  03b4  49 08   .finish lod a,$49               get offset
  03b5  2e 3e           add a,#disptrn          add in base adr
  03b6  84 00           lod iadres,a            set adr
  03b7  47 08           lod a,$47               get saved byte..
  03b8  80 00           lod idata,a             ..and restore it
  03b9  cf 01           stz tststat             start test sequence
  03ba  08 00           rts                     done



******                  command dispatcher
*
  03bb  3a 08   disptch lod a,$3a               get received byte #0 = command
  03bc  03 19           sbr status,z            is it blank?
  03bd  08 00           rts                     yes, just return
  03be  53 3a           eor a,#$53              code 0x53?
  03bf  03 19           sbr status,z
  03c0  44 2b           jmp setptrn             yes
  03c1  05 3a           eor a,#$05              code 0x56?
  03c2  03 19           sbr status,z
  03c3  75 2b           jmp setint
  03c4  0a 3a           eor a,#$0a              code 0x5c?
  03c5  03 1d           sbs status,z
  03c6  08 00           rts                     was garbage, just return
  03c7  7f 2b           jmp ledtest             yes


******                  some math magic just for intensity value
*
*
*
  03c8  d0 00   magic   lod $50,a
  03c9  d4 01           stz $54
  03ca  03 10           rmb status,cy
  03cb  fd 30           lod a,#$fd
  03cc  51 07           add a,$51
  03cd  03 1c           sbs status,cy
  03ce  ef 2b           jmp $03ef
  03cf  d3 01           stz $53
  03d0  f0 30           lod a,#$f0
  03d1  51 05           and a,$51
  03d2  03 1d           sbs status,z
  03d3  d7 2b           jmp $03d7
  03d4  04 30           lod a,#$04
  03d5  d3 00           lod $53,a
  03d6  d1 0e           swn $51
  03d7  d2 01           stz $52
  03d8  03 10           rmb status,cy
  03d9  d3 0a           inc $53
  03da  d1 0d           rol $51
  03db  03 1c           sbs status,cy
  03dc  d9 2b           jmp $03d9
  03dd  d1 0c           ror $51
  03de  51 08           lod a,$51
  03df  50 02           sur a,$50
  03e0  03 18           sbr status,cy
  03e1  d0 00           lod $50,a
  03e2  d2 0d           rol $52
  03e3  d3 0b           dsz $53
  03e4  dd 2b           jmp $03dd
  03e5  d4 1f           sbs $54,7
  03e6  e9 2b           jmp $03e9
  03e7  d2 09           not $52
  03e8  d2 0a           inc $52
  03e9  52 08           lod a,$52
  03ea  d4 1f           sbs $54,7
  03eb  08 00           rts
  03ec  d0 09           not $50
  03ed  d0 0a           inc $50
  03ee  08 00           rts
  03ef  d1 0c           ror $51
  03f0  03 18           sbr status,cy
  03f1  f8 2b           jmp $03f8
  03f2  d1 0c           ror $51
  03f3  03 1c           sbs status,cy
  03f4  d0 01           stz $50
  03f5  03 10           rmb status,cy
  03f6  d0 0c           ror $50
  03f7  03 1c           sbs status,cy
  03f8  03 10           rmb status,cy
  03f9  50 08           lod a,$50
  03fa  d2 00           lod $52,a
  03fb  d0 01           stz $50
  03fc  d0 0d           rol $50
  03fd  e5 2b           jmp $03e5

  03fe  03 34           rtl a,#$03

  03ff  80 34           rtl a,#$80              osccal factory preset value
FormerMazda
Inlägg: 6076
Blev medlem: 27 februari 2006, 14:59:36
Ort: Tranås (Jönköping)

Re: Programmera om prisskylt till något annat...

Inlägg av FormerMazda »

Tror det var former mazda som testade lite att mäta på de aktuella signalerna. Kan Du bekräfta eller avfärda att ovanstående är rimligt? Jag är som Ni vet invalid och har stökigt att mäta på dessa klumpiga saker.
Jo jag mätte lite, men kom inte fram till mycket alls tyvärr, annat än att efter uppstart så hade jag nån ständig dataström.
Men med begränsade kunskaper och utan att veta hastigheter, data och stopbitar så gick jag inte vidare, blir för mycket att vrida och vända på innan jag ens vet vad jag ska försöka koda av liksom.
Visste jag exakt baudrate, data och stop och allt (9600,8,1,NONE ?) så kunde man väl testa att skicka enligt din assemblering. Men det blir fortfarande ett svårt test för mig om data krävs oftare än varje sekund exempelvis.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6921
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Programmera om prisskylt till något annat...

Inlägg av Marta »

Det finns ingen baudrate eller start/stoppbitar. Möjligtvis att SPI skulle kunna användas för att skicka data, men halva klockperioden blir bortkastad.

Data skall sättas tillsammans med klockans negativa flank och vara kvar till nästa negativa flank, eller minst motsvarande tid för sista bit. Klockperioden skall vara klart längre än 500µs. När kommando/data sänts skall klockan hållas stilla mer än 3ms.

En Arduino som skickar SPI 300bps och håller data stabil efter negativ flank på klockan bör funka för att testa om signalen skall skapas av något befintligt. Annars är det lätt och bäst att generera den i programvara. Originalkortet gör det så.

Allt trassel beror på vad de har använts till. Alternativet att visa blaj vid fel finns inte.
Skriv svar