Resultat display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

>Andra kommandot är helt onödigt (men det gör ingen skada heller)...

Jag ville vara på säkra sidan, för när man hade kört en sublw. så ändrade den värdet i w.

>Kan du posta MAP'en så att vi ser var RES har allokerat variablerna ?
Var hittar man den, är inte så bekant med programmet.

Förresten, du får inget felmedelande vid "build" ?
Jo jag fick det först om att det bara finns 16 byte i SHR, då jag in en till då slutade programmet klaga.
Det kanske är felet?
Kan man lägga den andra i SLR?

EDIT:
Hittade MAP-filen.
http://rodel.se/PIC16F886.map
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Titta i MAP'en. Se t.ex :

Kod: Markera allt

RX_DATA   0x000070       data
...
DIGIT_0   0x0000f0       data
Kolla i databladet (sidan 25) på minnesmappen.
Notera att adresserna h'70' och h'F0' accessar *samma* minne !
Så när du skriver till t.ex DIGIT_0 så skriver du samtidigt till RX_DATA...

Du får flytta ut lämpliga delar ut från UDATA_SHR till vanligt "banked memory".

Ett snyggt sätt att göra det är som följer :

Låt oss lägga data-sektionen "DLR_3416_var" i bank0.

Lägg till en "section" i LKR filen :

Kod: Markera allt

SECTION    NAME=IDLOCS   ROM=.idlocs    // ID locations
SECTION    NAME=DEEPROM  ROM=eedata     // Data EEPROM

SECTION    NAME=DLR_3416_VAR  RAM=gpr0  // Data section for DLR-vars.
Enbart den sista raden är ny !
Nu finns det en DATA-sektion som vi kan använda.
I koden gör du följande ändring :

Kod: Markera allt

;DLR_3416_var	UDATA_SHR
DLR_3416_var	UDATA
digit_0			RES 1   ; variable used for context saving
digit_1			RES 1
digit_2			RES 1
digit_3			RES 1
digit_4			RES 1
digit_5			RES 1
digit_6			RES 1
digit_7			RES 1
DLR3416_POS	        RES 1           ; Position på displayen.
DLR3416_CHAR    	RES 1           ; Tecken som ska skrivas.
Notera att det är samma namn i ASM filen som på sektionen i LKR filen,
detta gör att denna sektion kommer att "styras" till just databanken "gpr0".
Att lägga det i gpr0 minskar behovet av bankswitching...
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

>Notera att adresserna h'70' och h'F0' accessar *samma* minne !
>Så när du skriver till t.ex DIGIT_0 så skriver du samtidigt till RX_DATA...
Ja det förklarar varför det inte funka, det kom ju upp lite olika tecken ibland.
Sen kom sista siffran upp på rx_buffer 0-4.

Ja och med ändringarna fungerar det, nu måste jag bara titta på Countern för den funkar inte.
Den räknar inte ner till noll så att den går in i Set_full och sätter flaggan för Buffer_full.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, har inget svar på just det...

Men annan liten detalj... :-)

> ...
> btfss STATUS, Z ; D.v.s skippa nästa inst om Z = 1
> goto write_buffer
> goto clear_buffer
>write_buffer
> movf rx_data, w
> ...

Kan även skrivas :

> ...
> btfsc STATUS, Z ; D.v.s skippa nästa inst om Z <> 1
> goto clear_buffer
> movf rx_data, w
> ...

:-)
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Anledningen till det är att när jag testade det hela i MPLAB.
Så fick jag skriva så för att det skulle funka, så därför blev det så.
Men jag skall gå igenom hela den delen så att allt funkar, så man kan gå vidare.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Alltså, de två varianterna ska fungera lika bra, den ena bara sparar in en instruktion... :-)
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Har nytt problem
När man tagit emot 4 tecken och buffern blir full, så skrivs datat ut på displayen. Så långt allt bra, men sen när man matar in nytt data så skrivs det inte över på det som redan ligger i buffern. För det gamla datat ligger kvar på displayen.


EDIT: felet hittat

Var tvunget att ligga i ISR koden under Clear_buffer
movlw RX_Buffer
movwf FSR
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Precis, "ställa tillbaka2 FSR, så att säga, till början av RX_buffer.
Men tyckte det var med förrut, man jag kan ha sett fel...
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Så nu har jag labbat ett tag, både med att skicka data från pc´n och tidtagningen.
Det gick att ta emot data från båda men det skillde lite på hur det las upp på displayen.

Från tidtagningen var det rätt men inte från PC´n, då den flyttade en siffra varje gång i sidleds. Då löse jag det med att taemot 5 tecken istället för 4, men då låg inte siffrorna i packeten på samma ställen.

Men efter en stunds testande, ändrade jag pariteten på pc´n till even och då vart det rätt.

Så nu kunde man ta bort det 5 tecknet (esc) och ta emot dom 4 viktiga delarna ur packetet.

Så här sparas det i buffern.

Rx_buffer 1 = 21, 22, 23 (21)
Rx_buffer 2 = 20 - 3E (30, 32, 34, 36)
Rx_buffer 3 = 10 tal (30 - 39)
Rx_buffer 4 = 1 tal (30 - 39)

Det är alltså det som ligger i 3 och 4 som skall skickas till displayen.

Så nu börjar kodandet för att slussa allt data rätt.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Så nu har jag knackat till koden för publicering till displayen, men det vill sig inte.
Det verkar som det inte hamnar något på digit 0,1,3,4,6,7.

Så jag tar natter nu, med nya friska imorgon.

Här är koden som den ser ut nu.
http://rodel.se/resultat_display.asm
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Har felsökt ett tag nu men inte hittat varför det inte funkar.

Nu undrar jag om man måste läsa av allt i bufferten innan man kan skriva nytt data in till bufferten??
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nej men du måste återställa flaggorna för "buffer klar" vid att .... vänta lite här... läste koden och du har gjort en:
BufLen RES 4
Varför reserverar du 4 minnesplatser när du inte ens använder dom?

JAG använde
BufLen equ d'4';
som ett sätt att ha fasta lättlästa värden, den rad betyder "varje gång jag skriver 'BufLen' ska det bytas ut till d'4' men det gör att alla tal och värden som hänger ihop med detta värde ä kommer att bli rätt och det är till att läsa och förstå i klartext".

Din kommentar i första raden efter 'loop' är ganska felaktig och kommandot är i sig alldeles fel!

Du måste göra en "movf buffer_full,f" och därnäst en "btfsc STATUS,Z", som det är kollar du om bit#1 i "buffer_full" är '0' eller '1' och det var knappast vad du ville.

Jag har inte kollat så noga men du kan ju kolla efter fler sådana tabbar...
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Okej!

Nu har jag backat bandet och märkt att datat som klockan skickar kan skilja sig från lite.

Som standard skickas ett packet om 5 tecken, som ex. 1B 21 36 39 39, men när tidtagningen rullar kan den skicka data enligt följande.

1B 21 36 31, 1B 21 36 32, 1B 21 36 33, o.s.v. 1,2,3 tiondelar
Det är tiondelen som rullar, sen när sekunden ändras ser det ut enligt följande.

1B 21 35 31 30, 1B 21 36 31, 1B 21 36 32, o.s.v.
1B 21 35 är alltså 31=1 sek. och 30=0 tiondel, 1.0 .1 .2 osv.

Sen när man kommer upp på en minut ser det åt så här.
1B 21 33 31 30 30 30, 1B 21 36 31, 1B 21 36 32, o.s.v.

1B 21 33 är alltså 31=1 min. , 30=0 30=0, 30=0 1.00.0 .1 .2

Så nu vart det tillbaka till ritbordet igen.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

[quote="Icecap"][/quote]

Kunde inte svara på ditt i lägg då forumet krascha.

Att texten inte stämde till koden, beror på att jag hade ändrat i koden.
Sen hade jag inte uppdaterat den versionen som låg på nätet, miss av mig.

Jaja, som sagt nu backar jag bandet en bit och börjar om.
Som du kan se inlägget innan.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Då nu ESC har en ännu mer betydander roll.
Så kan man öka upp antal tecken som kan sparas i bufferten till 6.
Sen när ett ESC kommer, så sätts flaggan att buffern är full och då körs programmet i loopen.

Men då måste det tänkas om hur man tar reda på datat och läger det på rätt siffra och där behöver jag lite tips.


Nu är den uppdaterad, enligt det tänk som jag skrivit ovan.
http://rodel.se/resultat_display.asm
Skriv svar