Resultat display

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag skulle, i ditt läge, skicka ett liten mail till Sure och beskriva problemen.

Fasen, jag måste försöka få tid att testa den modul jag
har liggandes här, den är ju i princip kopplad på samma sätt,
fast med 4 displayer på samma kort.

(Stack till kontoret för att stöka under lite på eftermiddagen, men
blev sittande med en maskin fullsmackad av mail därför att en server
i Kina hade fått spatt vid lunchtid och skickade 10-20 mail per sekund.
Skit-trist men bra betalt... :-) )
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Jag får nog ta och göra det, men som sagt det funkar ju så här med.

När du har testat din modul, kan jag köpa den av dig. Känns som det är enklare att labba med något mindre än dessa stora som tar upp hela bordet.

Jag har jobbat som konsult förut, så jag vet hur trist det kan vara. Men som sagt det genererar ju pengar och det är bra. :)
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Stewal: hur många moduler har du? Och vad skulle priset vara på dom om det är så att du vill av med dom?

Anledningen är att frugan är blind som en mullvad utan glasögon (har -7 eller så) och hon vill gärna se vad klockan är på natten utan att fumla med glasögonen.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Har nu gått vidare med programmeringen och gjort en avkodare, som omvandlar ascii koden för 0-9 till hex-koden för respektive siffra. Så om man lägger in ascii kod i varje displays minnes plats, så avkodas det och skickas till displayen och vissas där. :)

Om jag lägger till koden för att ta emot data via rs-232 porten och skickar data, så händer inget. Det kommer inte in något på minnes platserna.

För er som inte kommer ihåg eller inte läst allt, så kommer datat in via ISR-rutin.

Någon som har en idé vad det kan vara.

Kan posta del avkod om ni vill, inte allt blir så mycket då. :shock:
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Icecap skrev:Stewal: hur många moduler har du? Och vad skulle priset vara på dom om det är så att du vill av med dom?

Anledningen är att frugan är blind som en mullvad utan glasögon (har -7 eller så) och hon vill gärna se vad klockan är på natten utan att fumla med glasögonen.
Jag har 6 st. och kommer att behöva de, för detta projekt.
Enklast är nog att köpa de på nätet, vet inte om Sodjan hade de här 7" stora. Men jag köpte mina direkt från Sure Electronicshttp://www.sureelectronics.net/goods.php?id=721 Tror det landade på 250 kr per display, med tull och frakt.
Va lite bökigt med fraktbolaget TNT, då jag var tvungen och ringa tullen och få tull deklarations numret och ge till TNT. Men nu vet man det också.


Ja man lär nog garanterat se klockan utan brillor. :lol:
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Då var det tydligen något annat, men nog tusan är det konstigt att ett 8-bit skiftregister uppför sig som om det var 7-bit.

Gör ett test till med ett motstånd i serie med datalinan, utan konding, t.ex. 4k7 eller 10k.

Det här måste gå att lösa, även om det förefaller vara magi inblandat så är där alltid en naturlig förklaring till slut.

100n är i mäktigaste laget, klockas den snabbt så kan det bli andra problem.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Jag har inga motstånd, där jag befinner mig nu. Så det får isåfall vänta tills jag varit förbi lägenheten. Som det ser ut nu blir det först vecka 43.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Bara sök på "information board led 7-segment" på eBay så kommer
alla modellerna upp...

Är dina RS232/USART rutiner felsökta separat ?
D.v.s har du fungerat separat utan LED-display prylarna ?
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Jag har inte ändrat något i RS232/USART rutinerna, så de borde funka.

Men jag får nog ta och testa det.

Tyvärr kommer jag ha fullt upp med annat jobb nu, så det får blir på kvällarna nu. :(
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Då har jag testat lite men tror att ISR rutinen inte anropas när data kommer in. Har bygglat in och ut på max232 cmos sida och då skickas datat tillbaka, så den fungerar.

koden i ISR rutinen har jag stegat igenom och den funkar och data sparas på minnesplatserna.

Är det någon som kan se något fel i koden?

Kod: Markera allt

;**********************************************************************
;TEST av display
;
;**********************************************************************
;
;
 list      p=16f886             ; list directive to define processor
 #include <p16f886.inc>         ; processor specific variable definitions
; 
 __CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
 __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;
    errorlevel -302 
;
	#define		COUNTER		PORTB, 0
	#define		DATAIN		PORTA, 0
	#define		CLKIN		PORTA, 1
	#define		DIMMIN		PORTA, 2
	#define 	ESC				0x1B
	#define		HOUR_TAG    	0x30
	#define 	CURRENT_TIME 	0x21
	#define 	MINUTE_TAG		0x32
	#define 	SECOND_TAG 		0x34
	#define 	SEC100_TAG		0x36
	#define 	SEC10K_TAG		0x38
;   
;
;**********************************************************************
RESET_VECTOR    CODE    0x000       ; processor reset vector
     goto    start               ; go to beginning of program
;
;
INT_VECTOR      CODE    0x004       ; interrupt vector location
        retfie                      ; Ingen interrupt kod...
;        
RS232_VAR		UDATA_SHR       
RX_DATA     	RES 1           ; Data som motagits från RS232 port. 
TX_DATA			RES 1           ; Data att skicka till RS232 port.
RX_BUFFER		RES 2			; Motagningsbuffer på 2 byte
Ind_check		RES 1
buffer_full		RES 1
w_temp		RES	1	; variable used for context saving 
status_temp	RES	1	; variable used for context saving
pclath_temp	RES	1
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
digit_9		RES 1
SEND		RES 1
chk_number	RES 1
;**********************************************************************
;**********************************************************************
; Huvudkoden.
; Här hamnar vi vid reset eller power-on (från RESET_VECTOR)
;
;
MAIN    CODE
start
;
;
GIE01			
	banksel INTCON
        clrf	INTCON
		btfsc	INTCON, GIE
		goto	GIE01
		bsf		INTCON, PEIE	
	banksel ANSEL               ; Stäng av alla analoga funktioner
		clrf    ANSEL
		clrf    ANSELH
	banksel TRISA               ; Alla pinnar utgångar 
       	clrf    TRISA
	banksel	TRISB	
		clrf    TRISB
	banksel PORTC
       	clrf	PORTC
	banksel	TRISC
		movlw	b'11000000'
		movwf	TRISC
	banksel PIE1
		clrf 	PIE1
		bsf	PIE1, RCIE
	banksel	PIR1
		clrf	PIR1
	banksel	PIR2
		clrf	PIR2
	banksel PIE2
		clrf	PIE2
	banksel	TXSTA
		bcf	TXSTA, TX9	;Sätt 8 bits sändning		
		bsf	TXSTA, TXEN	;Sätt data sändning
		bcf	TXSTA, SYNC	;Async kommunikation
		bcf	TXSTA, BRGH	;Låg klock hastighet
	banksel	SPBRG
		movlw	d'25'		;Sätt Baudrate till 2400, SPBRG value=25
		movwf	SPBRG
	banksel RCSTA		
		bsf RCSTA, SPEN	;Starta serial port
		bcf	RCSTA, RX9	;Sätt 8 bits mottagning
		bsf	RCSTA, CREN	;Sätt konstant motaggning
		bcf	RCSTA, FERR		
	banksel	INTCON
		bsf INTCON, GIE
        banksel portb 
;
;
loop
		goto loop                       ; Gör ingenting....
;
ISR_ROUTINE  	CODE
;
isr_routine
;
	movwf	w_temp		; save off current W register contents
	movf	STATUS,W	; move status register into W register
	movwf	status_temp	; save off contents of STATUS register
	movf	PCLATH,W
	movwf	pclath_temp
	clrf	PCLATH		; Be sure that wer'e home alone
datain1
		btfsc	RCSTA, OERR
		goto	overerror		;om 'overflow error'...
		btfsc	RCSTA, FERR
		goto	frameerror		;om 'framing error'...
		goto	esc_check
;
overerror
		banksel RCSTA
		bcf	RCSTA, CREN	;Stäng av pulse cren
		movf	rcreg,w		;Rensa FIFO
		movf	rcreg,w		;är tre steg 
		movf	rcreg,w
		bsf	RCSTA, CREN	;Sätt cren och oerr blir låg.¨
		goto	datain1		;försök igen...
;
frameerror 				
		movf	rcreg,w			;Att läsa av RCREG gör att FERR blir låg.
		goto	datain1			;Försök igen..
;
esc_check		
		movf	RCREG, w	
		andlw	h'7F' ; strip MSB
		movwf	RX_DATA
		movf	RX_DATA, w
		sublw	ESC				
		btfsc	STATUS, Z		; D.v.s skippa nästa inst om Z = 0
		goto	clear			; Om ESC, återställ allt.
if_0x21
		movf	rx_data, w
		sublw	CURRENT_TIME	; Om inkommet tecken = 0x21, så blir Z nu = 0
		btfss	STATUS, Z		; D.v.s skippa nästa inst om Z = 1
		goto	index			; Gå till Index
		movf	rx_data,w		; Spara 21 i Rx_buffer+1
		movwf	INDF		
		incf	FSR	
		goto	done
index
		movf	rx_buffer,w
		sublw	CURRENT_TIME	; Om RX_BUFFER+1 = 0x21, så blir Z nu = 0
		btfss	STATUS, Z		; D.v.s skippa nästa inst om Z = 1
		goto	clear		
		btfsc	Counter			; Om Counter =0, hoppa över nästa.
		goto	index_0			; Om Counter =1, gå till Index_0
		movf	rx_data,w		; Spara Indexpekare i RX_buffer+2
		movwf	INDF		
		incf	FSR
		bsf		Counter
		goto	done
Index_0
		movf	rx_buffer+1, w		
		movwf	Ind_check
		movlw	h'30'
		subwf	ind_check		
		btfss	STATUS, Z		; Index pekare =30  ?
        goto	index_1			; Nej, gå till Index_1
		movf	rx_data, w
		movwf	digit_7
		incf	rx_buffer+1
		goto	done
;
index_1
		decfsz	Ind_check, f		; Index pekare =31  ?
        goto	index_2			; Nej, gå till Index_2
		movf	rx_data, w
		movwf	digit_6
		incf	rx_buffer+1
		goto	done
index_2
		decfsz	Ind_check, f		; Index pekare =32  ?
        goto	index_3			; Nej, gå till Index_3
		movf	rx_data, w
		movwf	digit_5
		incf	rx_buffer+1
		goto	done
index_3
		decfsz	Ind_check, f		; Index pekare =33  ?
        goto	index_4			; Nej, gå till Index_4		
		movf	rx_data, w
		movwf	digit_4
		incf	rx_buffer+1
		goto	done
index_4
		decfsz	Ind_check, f		; Index pekare =34  ?
        goto	index_5			; Nej, gå till Index_5
		movf	rx_data, w
		movwf	digit_3
		incf	rx_buffer+1
		goto	done
index_5
		decfsz	Ind_check, f		; Index pekare =35  ?
        goto	index_6				; Nej, gå till Index_5
		movf	rx_data, w
		movwf	digit_2
		incf	rx_buffer+1
		goto	done
index_6
		decfsz	Ind_check, f		; Index pekare =36  ?
        goto	index_7				; Nej, gå till Index_5
		movf	rx_data, w
		movwf	digit_1
		incf	rx_buffer+1
		goto	done
index_7
		decfsz	Ind_check, f		; Index pekare =37  ?
        goto	done				; Nej, gå till Index_5
		movf	rx_data, w
		movwf	digit_0
		clrf	rx_buffer
		goto	done
;
;
clear					;Rensa buffern och gå ur ISR
		nop
		nop
		nop
		nop
		clrf	rx_buffer 
		clrf	rx_buffer + 1 
		clrf	rx_buffer + 2 
		movlw	RX_Buffer
		movwf	FSR
		bcf		Counter
done		
	movf	pclath_temp,W	; Read copy of PCLATH
	movwf	PCLATH		; Restore to pre-ISR content
	movf	status_temp,W	; Retrieve copy of STATUS register
	movwf	STATUS		; Restore pre-isr STATUS register contents
	swapf	w_temp,F
	swapf	w_temp,W	; Restore pre-isr W register contents
;

	retfie
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Byt ut:

Kod: Markera allt

        retfie                      ; Ingen interrupt kod...
till:

Kod: Markera allt

        goto    isr_routine         ; Hopp till interrupt koden...
Det är ju klart att inget händer när du gör RETFIE direkt... :-)

Jag antar att detta är något du har sett eller läst om:

Kod: Markera allt

GIE01			
	banksel INTCON
        clrf	INTCON
		btfsc	INTCON, GIE
		goto	GIE01
Deet är en liten fix som jag inte vet om den
behövs längre, men tidigare så fanns det ett timing problem när man
stängde av GIE som gjorde att om det blev ett interrupt samtidigt som
GIE nollades, så kunde det hända att interruptet kördes direkt efter
instruktionen och sedan när man kommer tillbaka till nästa instruktion så
är GIE satt igen (via RETFIE). Workarounded var att texta GIE direkt och loopa
tills det är noll. i 999 fall av 1000 så blev den noll direkt...

Hur som helst, det gör ingen skada, men du behöver inte köra om BANKSEL
flera gånger, labeln kunde sitta en rad längre ner.

På flera ställen gör du :

Kod: Markera allt

goto	datain1		;försök igen...
Det ser inte rätt ut.
Du ska/bör avsluta ISR'en direkt, du får ett nytt interrupt när nästa tecken kommer.
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Då skall jag testa vidare ikväll och se om det hoppar igång. tack
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Då har jag testat lite mer, ändrade det du skrev men fortfarande händer inget. Har även testat att låta inkommet data skickas tillbaka till txreg, men inget data kommer tillbaka.

En fråga om ISR, har för mig att inkommet data skall trigga ISR och då sparas all pågånde hantering och ISR tar över och koden där körs till det är klart sedan laddas det den håll på med och körs vidare. Stämmer det?
Stewal
Inlägg: 354
Blev medlem: 17 januari 2008, 16:38:41
Ort: Nämdö

Inlägg av Stewal »

Då har jag konstaterat att ISR rutinen inte triggas. Har testat plocka koden ur ISR och la den innan loop och då fungerar det.
Ändrade så att datat som togs emot skickades tillbaks. Så vad kan ha hänt med den?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Märkligt.

GIE, PEIE, RCIE ser OK ut. De är kanske lite onödigt utspridda i koden,
vilket gör det lite onödigt svårt att kolla, men i alla fall...

> och då sparas all pågånde hantering och ISR tar över

Det enda som sparas *automatisk* är PC (programräknaren) så
att den vet vart den ska returnera vid RETFIE. Allt annat är kodens
uppgift att ta hand om, vilket du ju gör med W, STATUS och PCLATH.
Annars är det i princip rätt.

Slutligen så ska det nog gå att simulera ISR'en i MPSIM (i MPLAB).
Skriv svar