Ytterligare en HD44780 tråd.....

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Jaha, då blev jag i alla fall tvungen att starta en ny tråd, trots att detta ämne är behandlat om och om igen. När jag fick hem displayerna så dök jag huvudstupa in och började programera och testa. Hade läst ett gäng PDFer och liknande i väntan på displayerna så jag hade självförtroendet på topp. Men, ack så fel jag hade.

Nu ska vi se.

Display från Kjell & Co: http://www.kjell.com/?item=90215&path=2 ... ,290000000
PIC: PIC16F628A
Strömkälla: 5.16V

Jag hade alldeles för bråttom att kopla in allt så mitt i glädjen att det lös så fint så brände jag bakgrundsbelysningen. 8) Klantigt som attan men det spelar mindre roll i nuläget.

Jag har nu prövat att initiera LCDn med en kod som är en komposit av guiden i Wikin och Sodjans exempelkod på hans sida.

Problemet jag har är att jag inte ser något på displayen. Alltså jag lyckas inte ens se de Svarta(vita) rutorna som ska vara på den ena raden vid startup. Jag har bara fått ett par "dassiga" pixlar som tonar bort när jag kopplat på strömen på kretsen. Det "Dassiga" pixlarna har bara varit utspridda på de fyra första (Eller fyra sista) tecken rutorna.

Jag är lite orolig att jag bränt hela displayen så jag börjar från början med frågorna.

Jag undrar vad det absoluta minimum som jag behöver koppla in för att HD44780 ska köra sin egna startup så att jag ska kunna se de 16 rutorna på den övre raden? Ska det räcka med VSS och VDD? I sånna fall är displayen körd. :)

Här är koden i fall någon skulle vara intresserad/orka titta på den:

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F628A. This file contains the basic code              *
;   building blocks to build upon.                                    *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional             *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F628A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;**********************************************************************

	list      p=16f628A           ; list directive to define processor
	#include <p16F628A.inc>       ; processor specific variable definitions

	errorlevel  -302              ; suppress message 302 from list file
	errorlevel  -312 

	__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.


    #define     LCD_E       PORTA, 0
    #define     LCD_RS      PORTA, 1
    #define     LCD_PORT    PORTA

;***** VARIABLE DEFINITIONS

	cblock		H'20'
		w_temp        	;Interuppt temp värden
		status_temp

		
		d1				;Delay rutinernas minnen
		dd1
		dd2
		ddd1
		ddd2
		ddd3


		LCD_TMP1        ;LCD tempregister
		LCD_TMP2
	endc






;**********************************************************************
	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program
	

	ORG     0x004             ; interrupt vector location
	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

; isr code can go here or be located as a call subroutine elsewhere


	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                    ; return from interrupt


main

;---------------------------------------------------------------------
;	Set up I/O 
;---------------------------------------------------------------------
		banksel		TRISB			; 
		clrw						; Make all PORTB bits output
		movwf		TRISB

		movwf		TRISA			; 
		banksel		PORTA			; Back to bank 0
		movwf		PORTA			;Avstängda
		movwf		PORTB			;Avstängda

; remaining code goes here


start
		call		delay_1s
		call		lcd_init_hd44780
		call		delay_1s
		movlw		b'00110001'
		call		lcd_send_data

		

loop                           ; Gör ingenting....

		movlw		b'11111111'
		xorwf		PORTB
		call		delay_1s
		goto	loop		  ;loop forever, remove this instruction, for test only

lcd_init_hd44780
;
        call    delay_1s        ; Ge LCD'n tid att starta...
        bcf     LCD_E           ; Se till att E och RS är
        bcf     LCD_RS          ; nollade...
; Skicka initkoder enligt manual för HD44780.
; För detaljer, se manual för HD44780 eller datablad för en LCD.
;
        movlw   h'30'
        call    lcd_send_4_bit
        call    delay_5ms
        movlw   h'30'
        call    lcd_send_4_bit
        call    delay_5ms
        movlw   h'30'
        call    lcd_send_4_bit
        call    delay_100us
        movlw   h'20'           ; Byt till 4-bitars interface !
        call    lcd_send_4_bit
        call    delay_100us
;        movlw   h'20'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'80'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'00'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'80'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'00'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'10'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'00'           
;        call    lcd_send_4_bit
;        call    delay_100us
;        movlw   h'60'           
;        call    lcd_send_4_bit
;        call    delay_100us

;
; Allt härefter sänds som två
; 4-bittars "nibbles". Först
; den höga delen (bit 4-7) sedan
; den låga (bot 0-3).
; Se lcd_send_cmd och lcd_send_data för detaljer.

        movlw   b'00101000'     ; Function set
        call    lcd_send_cmd
        call    delay_100us
        movlw   b'00010100'     ; Display/curs shift
        call    lcd_send_cmd
        call    delay_100us
        movlw   b'00001110'     ; Display/curs on/off
        call    lcd_send_cmd
        call    delay_100us
        movlw   b'00000110'     ; Entry mode set
        call    lcd_send_cmd
        call    delay_100us
        movlw   b'00000010'     ; Display/curs home
        call    lcd_send_cmd
        call    delay_100us
        movlw   b'00000001'     ; Display clear
        call    lcd_send_cmd
        call    delay_100us
;
; För detaljer kring varje kommando oven hänvisas till
; manual för HD44780 eller ett datablad för en LCD.
;
        return




lcd_toggle_E
;
; Toggla E p LCD'n så att data på D4-D7 läses in.
;
        banksel LCD_PORT
        bsf     LCD_E
        nop
        bcf     LCD_E
        nop
        return
;
lcd_send_4_bit
; Data i W-reg bit 4-7 överförs till LCD_PORT bit 4-7.
; LCD_PORT bit 0-3 lämnas som de är.
;
        banksel LCD_PORT
        movwf   LCD_TMP1        ; Spara LCD data...
        movlw   b'00001111'     ; "Mask" för LCD_PORT
        andwf   LCD_PORT, w     ; Läs av LCD_PORT bit 0-3
        iorwf   LCD_TMP1, w     ; Kombinare med LCD data bit 4-7
        movwf   LCD_PORT        ; Skriv tillbaka till LCD_PORT.
        call    lcd_toggle_E    ; Och överför till LCD.
        return

lcd_send_cmd
; Data i W överförs till LCD som ett "kommando".
;
        banksel LCD_PORT
        bcf     LCD_RS          ; RS = "0" för kommando.
        call    lcd_send_byte   ; Skicka
        call    delay_5ms       ; Vänta 5 ms efter ett kommando.
        return

lcd_send_byte
; Data i W överförs till LCD som två 4-bitars bitar.
;
        movwf   LCD_TMP2        ; Spara W tillfälligt
        movlw   B'11110000'     ; Mask för bit 4-7
        andwf   LCD_TMP2, w     ; Nolla bit 0-3
        call    lcd_send_4_bit  ; Skicka bit 4-7
        swapf   LCD_TMP2, f     ; Byt plats på 0-3 <-> 4-7
        movlw   B'11110000'     ; Mask för bit 4-7 (nu 0-3 !!)
        andwf   LCD_TMP2, w     ; Nolla bit 0-3 (nu 4-7 !!)
        call    lcd_send_4_bit  ; Skicka bit 4-7 (nu 0-3 !!)
        return


lcd_send_data
; Data i W överförs till LCD som "data".
;
        banksel LCD_PORT
        bsf     LCD_RS          ; RS = "1" för data
        call    lcd_send_byte   ; Skicka
        call    delay_100us     ; Ge LCD'n tid att bearbeta datat.
        return
;


;---------------------------------------------------------------
;				Delay rutiner
;---------------------------------------------------------------
; Delay = 0.0001 seconds
; Clock frequency = 4 MHz

; Actual delay = 0.0001 seconds = 100 cycles
; Error = 0 %

delay_100us
			;94 cycles
	movlw	0x1F
	movwf	d1
delay_100us_0
	decfsz	d1, f
	goto	delay_100us_0

			;2 cycles
	goto	$+1

			;4 cycles (including call)
	return


; Delay = 0.005 seconds
; Clock frequency = 4 MHz

; Actual delay = 0.005 seconds = 5000 cycles
; Error = 0 %


delay_5ms
			;4993 cycles
	movlw	0xE6
	movwf	dd1
	movlw	0x04
	movwf	dd2
delay_5ms_0
	decfsz	dd1, f
	goto	$+2
	decfsz	dd2, f
	goto	delay_5ms_0

			;3 cycles
	goto	$+1
	nop

			;4 cycles (including call)
	return

; Delay = 1 seconds
; Clock frequency = 4 MHz

; Actual delay = 1 seconds = 1000000 cycles
; Error = 0 %

delay_1s
			;999990 cycles
	movlw	0x07
	movwf	ddd1
	movlw	0x2F
	movwf	ddd2
	movlw	0x03
	movwf	ddd3
delay_1s_0
	decfsz	ddd1, f
	goto	$+2
	decfsz	ddd2, f
	goto	$+2
	decfsz	ddd3, f
	goto	delay_1s_0

			;6 cycles
	goto	$+1
	goto	$+1
	goto	$+1

			;4 cycles (including call)
	return

; initialize eeprom locations

	ORG	0x2100
	DE	0x00, 0x01, 0x02, 0x03

	nop
	END                       ; directive 'end of program'
Nu ser jag inte ens de dassiga pixlarna så jag tror att det är kört...

Jaja, vi får höra vad ni har att säga.

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

Re: Ytterligare en HD44780 tråd.....

Inlägg av sodjan »

Kontrastpinnen brukar (kan ibland) behöva en lämplig nivå för
att det ska synas något alls. Två rader ska bli gråa efter
spänningstillslag, normalt sett.

Jag har för mig att det en gång fanns en LCD från Kjell som hade
pinout spegelvänd i dokumentationen, eller något liknande. Har dock
ingen aning om det var just den...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

När du säger pinout spegelvänd, menar du hela raden av in/utgångar på displayen eller bara tex VSS & VDD? För pinne 1 och 14 är markerad likadant på kortet som i dokumentationen så det borde stämma.

På Electrical Characteristics i databladet står det Input Voltage max 5,5v alltså ligger jag under det.
Men på Mechanical Spec står det Supply Voltage for LCD Vlcd max 5,0 alltså ligger jag över det.
Vad betyder Vlcd?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ytterligare en HD44780 tråd.....

Inlägg av sodjan »

> På Electrical Characteristics i databladet står det Input Voltage max 5,5v

Vdd, den vanliga matningsspänningen. Normalt 5V.

> Men på Mechanical Spec...

Det är fortfarande "Electrical Characteristics".

> ...står det Supply Voltage for LCD Vlcd max 5,0 alltså ligger jag över det.

Och det är kontrastspänningen (pinne Vo). Anges från Vdd (alltså Vdd - Vo = Vlcd).
Alltså så ska den ligga på mellan 0V (GND) och 1V (mätt från GND, vilket vi ju
är mer vana vid...).

> Vad betyder Vlcd

Spännigen till LCD'n (kontrastingången).

EDIT: Glömde...

> När du säger pinout spegelvänd, menar du........

Jag har inga detaljer om vad felet är (var?), jag minns bara att någon
rapporterade att någon Kjell modul var feldokumenterad....
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Tackar för svaret. Nu är potentiometern jag satt dit ställd så att det ligger 0,89v på kontrastpinnen. Så ditt svar hjälpte mig att förstå men tyvärr så blev det ingen skillnad i praktiken.

Jag har en likadan LCD display till men är inte så sugen att stoppa in den innan jag kommit underfund med om denna är paj och i sådana fall varför den är paj. NU ser jag verkligen ingen ting på displayen, varken precis när jag spänningssätter den, när jag ändrar på kontrast pinnen eller när jag svär åt den.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ytterligare en HD44780 tråd.....

Inlägg av sodjan »

Såg att jag tidigare skrev :

> Två rader ska bli gråa efter spänningstillslag, normalt sett.

Det var ju en tvåraders LCD så det ska vara "en rad" ovan.
Och det är inte direkt vid spänningstillslag utan efter att
självtesterna har körts (normalt någon halvsekund senare)...

Och det räcker med Vdd, GND och Vo för att se detta (normalt sett).
Jag vet inte om dessa blåa moduler är annorlunda, men det borde
vara påverka själva backlighten. Tja, det är väl bara att ta den andra
och se till att göra rätt... :-)
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

NU har jag bytt display och och nu ser jag raden med vita rutor. Dock en "trasig" ruta. Ska försöka få upp en bild på det om en liten stund. Men nu käns det som om det är tillbaka till koden. Att försöka få den att Initiera och rensa fönstret.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Bilden på den trasiga "rutan".

Bild

Vrider jag på kontrasten till max så försvinner strecket om jag tittar absolut rakt framifrån men tittar jag bara lite snett så ser jag strecket igen.

Jaja... Nu ska jag i alla fall fösöka initiera displayen.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Nu har jag lyckats få den att skriva en statisk text.

Snyggt blir det också. :)

Två frågor.

Någon som vet vart jag kan läsa om hur man skriver kod så att man kan använda bokstäver i koden. (Det där blev konstigt)
Alltså jag har läst Sodjans kod exempel:
http://www.jescab.se/HD44780.html
Men jag lyckas inte förstå hur han gått till väga för att kunna skriva på detta sätt:

Kod: Markera allt

lcd_text1   data    d'1', d'1', 'L', 'C', 'D', ' ', 'D', 'E', 'M', 'O', h'00'
lcd_text2   data    d'1', d'10', '1', '6', 'F', '8', '8', '6', h'00'
lcd_text3   data    d'2', d'4', 'W','W','W','.','J','E','S','C','A','B','.','S','E', h'00'
lcd_text4   data    d'2', d'1', '(', 'C', ')', h'00'
För mig ser det nu ut så här:

Kod: Markera allt

		movlw		b'01001111'
		call		lcd_send_data
		movlw		b'01001111'
		call		lcd_send_data
		movlw		b'01100010'
		call		lcd_send_data
Det var fråga ett, nu kommer fråga två.

Någon som vet vart jag kan hitta info om hur man skriver dynamisk text, typ en räknare.

Jag sitter och kämpar men kommer inte mycket framåt.

Just nu har jag så att en räknare räknar från noll och uppåt och i displayen ändras det tecken, den skriver ett nytt tecken efter den andra i den ordningsföljd de kommer i databladet. Helt solklart så långt. Men när jag försöker att stanna upp "cursor"n så vill den inte skriva.

Kod: Markera allt

loop
          movlw     .64     ; Display clear
          call         lcd_send_cmd

          incf	       rakna
          movfw     rakna
          call		lcd_send_data
	  goto	loop
När jag loopar denna i Simulatorn så växer förståss "rakna"
Men när jag kör den på displayen så händer det inget annat än att "Cursorn" ställer sig på den plats jag talat om.
Synpunkter?

Tacksam för alla svar.

MVH Peter F
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Nu lyckas jag skriva till samma position hela tiden. Vet inte riktigt vad jag gjorde när jag skrev ovanstående inlägg så det kan vi ta och stryka... :)

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

Re: Ytterligare en HD44780 tråd.....

Inlägg av sodjan »

Ett sådant där "streck" brukar tyda på dålig kontakt mellan glas-modulen
och mönsterkortet. Blir det skillnad om du klämmer eller bänder
på modulen ?
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Näe jag lyckas inte få det att bli någon skillnad när jag bryter och bänder.
Får skicka ett mail till Kjell & Co och höra om man kan få en ny.

Nu har jag till och med lyckats göra min första klocka! Precisionen med den interna ocilatorn och min kod är extremt bra, bara 3,5 minuter fel på 5 timmar. :D Plus att den just nu inte byter till 01 efter 24 utan fortsätter till 25 8)

Jäv*ar så roligt med lite "output" från Picen.

Nu blir det nog (Paralellt med mina andra projekt) att titta på mina 1-wire temp sensorer, försöka få dem att visa tempen på displayen blir intressant.

Tack för all hjälp, räkna med att höra av mig snart igen. :oops:

MVH Peter F
Norpan
Inlägg: 2229
Blev medlem: 12 april 2008, 18:20:27
Ort: Småland

Re: Ytterligare en HD44780 tråd.....

Inlägg av Norpan »

Ska man följa någon form av standard på en klocka så ska det ju bli 00 efter 23. :vissla: :mrgreen:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ytterligare en HD44780 tråd.....

Inlägg av sodjan »

> Precisionen med den interna ocilatorn och min kod är extremt bra, bara 3,5 minuter fel på 5 timmar.

Jag minns inte processormodelen men 3.5 min på 5 tim är väl lite drygt 1% (1.1%),
vilket är helt OK och förväntat i alla fall med de nyare INTOSC vilka är
fabrikstrimmade till +/- 1%. Kollade nu och det var ju en 628A, den har en +/- 2%
INTOSC, dock är detta över ett större temp-intervall och vid rumstemperatur
så är nog inte 1% helt orimligt... :-)
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Ytterligare en HD44780 tråd.....

Inlägg av PopUnoNkoK »

Norpan: Nu ska vi inte vara sånna. :)

Sodjan: Jag räknade faktiskt aldrig på det men det betyder alltså att koden är helt OK, att man kan förvänta sig den "felmarginalen" med den INTOSC . Det var faktiskt ganska kul att höra.

Nu är jag dock liiiiite orolig att jag har lyckats bränna bakgrundsbelysningen på display nummer 2 också. :oops: Motståndet jag hela tiden har haft där har bara varit på 10ohm ser jag nu och det känns för lite. Vet inte riktigt hur jag tänkte igår natt. Det blev lite sent. :)

Shit vad dåligt man ser helt utan bakgrundbelysning. Jaja, funkar som testdisplay.

Nu kommer faktiskt en fråga mitt i alltihop.

Jag testade att Icludera denna kod i min displaykod.

Kod: Markera allt

; *******************************************************
;
; Dallas 1-Wire Support for PIC16F628
;
; Processor has 4MHz clock and 1µs per instruction cycle.
;
; *******************************************************


; *******************************************************
; Dallas Semiconductor 1-Wire MACROS
; *******************************************************
OW_HIZ:MACRO
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BSF           TRISB, DQ                   ; Make DQ pin High Z
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      ENDM
; --------------------------------------------------------
OW_LO:MACRO
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      BCF           PORTB, DQ                   ; Clear the DQ bit
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BCF           TRISB, DQ                   ; Make DQ pin an output
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      ENDM
; --------------------------------------------------------
WAIT:MACRO TIME
;Delay for TIME µs.
;Variable time must be in multiples of 5µs.
      MOVLW         (TIME/5)-1                  ;1µs
      MOVWF         TMP0                        ;1µs
      CALL          WAIT5U                      ;2µs
      ENDM

; *******************************************************
;       Dallas Semiconductor 1-Wire ROUTINES
; *******************************************************
WAIT5U:
;This takes 5µS to complete
      NOP                                       ;1µs
      NOP                                       ;1µs
      DECFSZ        TMP0,F                      ;1µs or 2µs
      GOTO          WAIT5U                      ;2µs
      RETLW 0                                   ;2µs
; --------------------------------------------------------
OW_RESET:
      OW_HIZ                                    ; Start with the line high
      CLRF PDBYTE                               ; Clear the PD byte
      OW_LO
      WAIT          .500                        ; Drive Low for 500µs
      OW_HIZ
      WAIT          .70                         ; Release line and wait 70µs for PD Pulse
      BTFSS         PORTB,DQ                    ; Read for a PD Pulse
      INCF          PDBYTE,F                    ; Set PDBYTE to 1 if get a PD Pulse
      WAIT          .400                        ; Wait 400µs after PD Pulse
      RETLW 0
; --------------------------------------------------------
DSRXBYTE: ; Byte read is stored in IOBYTE
      MOVLW         .8
      MOVWF         COUNT                       ; Set COUNT equal to 8 to count the bits
DSRXLP:
      OW_LO
      NOP
      NOP
      NOP
      NOP
      NOP
      NOP                                       ; Bring DQ low for 6µs
      OW_HIZ
      NOP
      NOP
      NOP
      NOP                                       ; Change to HiZ and Wait 4µs
      MOVF          PORTB,W                     ; Read DQ
      ANDLW         1<<DQ                       ; Mask off the DQ bit
      ADDLW         .255                        ; C=1 if DQ=1: C=0 if DQ=0
      RRF           IOBYTE,F                    ; Shift C into IOBYTE
      WAIT          .50                         ; Wait 50µs to end of time slot
      DECFSZ        COUNT,F                     ; Decrement the bit counter
      GOTO          DSRXLP
      RETLW         0
; --------------------------------------------------------
DSTXBYTE:                                       ; Byte to send starts in W
      MOVWF         IOBYTE                      ; We send it from IOBYTE
      MOVLW         .8
      MOVWF         COUNT                       ; Set COUNT equal to 8 to count the bits
DSTXLP:
      OW_LO
      NOP
      NOP
      NOP                                       ; Drive the line low for 3µs
      RRF           IOBYTE,F
      BSF           STATUS,RP0                  ; Select Bank 1 of data memory
      BTFSC         STATUS,C                    ; Check the LSB of IOBYTE for 1 or 0
      BSF           TRISB,DQ                    ; HiZ the line  if LSB is 1
      BCF           STATUS,RP0                  ; Select Bank 0 of data memory
      WAIT          .60                         ; Continue driving line for 60µs
      OW_HIZ                                    ; Release the line for pullup
      NOP
      NOP                                       ; Recovery time of 2µs
      DECFSZ        COUNT,F                     ; Decrement the bit counter
      GOTO          DSTXLP
      RETLW         0
; --------------------------------------------------------
Från denna sida:
http://www.maxim-ic.com/appnotes.cfm/an_pk/2420

Själva includeringen funkar för jag får en hel drös med felmeddelanden om Symboler som inte är bestämda tidigare mm så det är inte det som är frågan.

På vilket sätt ska man göra för att slippa alla felmeddelanden? Jag vet att det är en sjukt dåligt ställd fråga men jag ska försöka förklara. Alltså Koden ska vara skriven till en processor med samma namn förutom att jag har ett A på slutet vilket jag tror är en uppdaterad version.

Att man får en del felmeddelanden kan jag förstå men det är i princip från varje rad på INC filen.

Ett litet utdrag från felmeddelandena:

Kod: Markera allt

Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 42 : Symbol not previously defined (TMP0)
Message[302] C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 15 : Symbol not previously defined (DQ)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 48 : Symbol not previously defined (PDBYTE)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 21 : Symbol not previously defined (DQ)
Message[302] C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 23 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 23 : Symbol not previously defined (DQ)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 31 : Symbol not previously defined (TMP0)
Message[302] C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 15 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 15 : Symbol not previously defined (DQ)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 31 : Symbol not previously defined (TMP0)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 53 : Symbol not previously defined (DQ)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 54 : Symbol not previously defined (PDBYTE)
Error[113]   C:\DOCUMENTS AND SETTINGS\ANNI&PETTE\MY DOCUMENTS\PICPROGRAMMERING\MPLAB PROJECTS\LCD\ONEWIRE.INC 31 : Symbol not previously defined (TMP0)
Sedan är det över hundra: "Overwriting previous address contents (0053)" Meddelanden.
DQ har jag tex definerat i min huvudkod men får ändå felmeddelande.

Vad ska man tänka på när använder denna typ av kod. För jag gissar att det är något jag missat.

Ber om ursäkt för en konstig/dåligt formulerad fråga.

MVH Peter F
Skriv svar