MSSP init (edit)och radix-konvertering +lookup

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

MSSP init (edit)och radix-konvertering +lookup

Inlägg av Tottish »

Hej!
Skapade nyligen denna tråd om MSSP-kod från Application Maestro:
http://elektronikforumet.com/forum/view ... =7&t=36956
Fick dock aldrig riktigt någon kontroll över det så jag har bestämt mig för att satsa på att göra det hela själv från scratch istället.

Jag börjar då alltså med att försöka initiera MSSP modulen på min PIC16F886 och redan här stöter jag på patrull.
Jag initierar uCn precis som jag brukar.

Kod: Markera allt

Config bits:
__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 
Slår av alla analoga funktioner och sätter alla I/Os till utgångar utom SDA och SCL (RC3-4) och kör sedan den här koden som jag saxat ihop från MicroChip application note 735. Jag har dock ändrat så att slewrate är disabled.

Kod: Markera allt

	movlw   b'00111000' ; setup value 
                      	 ;   into W register
	banksel SSPCON     ; select SFR 
                 	   ;   bank 
	movwf   SSPCON     ; configure for 
                  	  ;   Master I2C


	movlw   b'00001001' ; setup value 
                    ;  into W register
	banksel SSPADD      ; select SFR bank 
	movwf   SSPADD      ; baud rate = 
                    ;  400KHz @ 16MHz	100@4MHz?

	movlw   b'11000000' ; setup value 
                    ;  into W register
	movwf   SSPSTAT     ; slew rate 
                    ;  disabled 
	banksel SSPSTAT     ; select SFR bank
Härmed så tycker jag att porten bör vara initierad. Dock så verkar pinnarna för SDA och SCL vara friflytande istället för "pulled up" som de borde vara om jag tolkat I2C/SMBus specen rätt. Har inte sett något som tyder på att externa pullups ska vara nödvändigt.
Någon som kanske har använt MSSP-modulen till I2C eller rent av SMBus som har en liten kodsnutt liggandes för en enkel initiering? Ska inte alls göra något fancy utan bara läsa av en IR-termometer så de mastodontprojekt som jag hittar på internet blir lätt svåröverskådliga och svårportade med alla sina finesser och funktioner.

Anyone?
MVH
/Tottish
Senast redigerad av Tottish 11 september 2009, 13:27:28, redigerad totalt 2 gånger.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med MSSP init

Inlägg av sodjan »

Processor ?
Jag har inte kört I2C själv, men brukar man inte alltid tala om
externa/separata pullup motstånd när det gäller I2C ? Eftersom
det är en delad buss (flera som kan driva den) så verkar det ju rimligt...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Re: Hjälp med MSSP init

Inlägg av Tottish »

Processor: PIC16F886

Låter ju vettigt, har provat med extern pullup men utan att det händer något när jag läger ut "StartCondition" på linan i koden. Ska dimensionera dem lite noggrannare så återkommer jag om en liten stund.

MVH
/Tottish
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Re: Hjälp med MSSP init

Inlägg av Tottish »

Jo, hemligheten var mycket riktigt väldimensionerade pull ups. Tack igen sodjan!

Nu funkar det som jag vill men nu har jag fått ett annat problem. Nu känner jag dock att jag startat tillräckligt med menlösa trådar så jag fortsätter på den här. :oops:

Det rör sig om den här funktionen:
http://piclist.com/techref/microchip/ma ... b4a-ng.htm

Den ska, om jag förstått saken riktigt, konvertera värdet i 16bitars variabeln Hi:Lo till fem enskilda variabler med värde 0-9. Alltså Hex -> Dec.
Den här konverteringen vill jag göra då värdet från termometern skall visas på tre 7-segmentare. format: (xx.x)

Likt tidigare problem så rör det sig om ett syntax som jag inte riktigt förstår hur det ska funka.
När jag testkör koden så stoppar jag in följande kodsnutt innan konverteringskoden:

Kod: Markera allt

	movlw	h'14'
		movwf	Lo
		movlw	h'0A'	
		movwf	Hi    
Det som händer är att den fastnar i den här koden innan den ens kommer fram till det första stället där jag förmodar att den ska spotta ut den högsta variabeln. Raden som är kommenterad:
; Output(temp) ;output temp = TenK

Syntaxet jag inte förstår är t.ex :
"movlw low(30000)"

Generellt så kan jag inte riktigt säga att jag förstår mig på tänket i koden.
Någon som ser mitt fel eller har en fungerande radix-konverterare (Hex->Dec) liggandes?

EDIT:
Fixade sig. Verkar som att författaren hade decimalt som default radix. Bytte ut "movlw low(30000)" och liknande mot "movlw low(d'30000')" så flöt den på fint sen.

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

Re: MSSP init (edit)och radix-konvertering

Inlägg av sodjan »

OK, fint att det löste sig... :-)
Först såg det ut som om det var low() och high() som du undrade över,
men de har du kanske koll på...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Re: MSSP init (edit)och radix-konvertering

Inlägg av Tottish »

"men de har du kanske koll på..."
Nepp, det hade jag inte men nu har jag nog fattat efter en del experimenterande och läsande i MPASM-manualen. :D

Nu har jag dock skaffat mig ett alldeles nytt problem som jag tänkte ta upp här pga tidigare nämnd anledning.
Det är en lookup som strular.

Kod: Markera allt

lookup      	
			ADDWF pcl                  ; Jump to entry spec'd by w.
             RETLW d'63'                ; 0, 1, 2, 3
             RETLW d'6'
             RETLW d'91'
             RETLW d'79'
             RETLW d'102'               ; 4, 5, 6
             RETLW d'109'
             RETLW d'125'
             RETLW d'7'                 ; 7, 8, 9
             RETLW d'127'
             RETLW d'103'
En enkel konverteringstabell för decimal-> "7sement-byte".
Får inte den första additionen att stämma riktigt. Det funkade först men sedan efter att ha ändrat i koden (inte i tabellkoden utan i huvud-koden) så blir additionen knasig:
Har man t.ex. med sig 0x4 i W in så hoppar den till initieringen efter additionen och har man 0x1 med sig så hoppar den tillbaks dit den kom ifrån men utan att ta med sig något i W (ingen RETLW äger rum). Tänkte att detta kanske är något strul med bankerna eftersom jag _fortfarande_ inte gått över till PIC18. Hade ett liknande problem med en lookuptabell förrut och det löste jag genom att lägga till "ORG h'0300'" vid labeln och sedan funkade det. Dock inte denna gång.
Utan ORG-"kommandot" så står PCn på 0x106 på raden för additionen och har man då h'(0-9) med sig i W så ska väl det funka? Vid initieringen som den hoppar till vid fallet 0x4 i W är PCn 0x5 om det kan hjälpa.

När jag kör uCn skarpt så verkar det som att den löper amok med lite blinkningar här och var på 7-segmentaren.

Någon idé?
MVH
/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MSSP init (edit)och radix-konvertering +lookup

Inlägg av sodjan »

> Tänkte att detta kanske är något strul med bankerna...

Nej, men med "sidorna" (pages).

Läs på om "calculated GOTO" och "PCLATH".
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Re: MSSP init (edit)och radix-konvertering +lookup

Inlägg av Tottish »

En skrivning till PCLATH innan anropandet av lookupen så var det besväret ur världen!
Tack!
/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MSSP init (edit)och radix-konvertering +lookup

Inlägg av sodjan »

Notera också att nyare PIC16's (som t.ex 16F886 som du använder)
har "riktiga" table read/write instruktioner (TBLRD/TBLWT).
Smidigare och flexiblare att använda är RETLW tabeller...
Tottish
Inlägg: 847
Blev medlem: 30 juni 2007, 19:11:37
Ort: Oslo, Norge

Re: MSSP init (edit)och radix-konvertering +lookup

Inlägg av Tottish »

Det är noterat. Har lite bråttom med den här grejen så det får bli i nästa projekt där det krävs en lookup.
Tack för informativ hjälp sodjan!
PS Har du funderat på att kräva support-pengar av microchip? Lär ju bli en skaplig klumpsumma vid det här laget om du räknar ihop timmarna plus tillägg för, i stort sett, dygnet-runt jour. DS :lol:

God natt!
/Tottish
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MSSP init (edit)och radix-konvertering +lookup

Inlägg av sodjan »

Nej, men att försöka skära ner på det... :-)
Skriv svar