Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1135 / 1318
(#) kullers válasza kullers hozzászólására (») Aug 31, 2013 /
 
Hy Hp41c!

köszi sokat segítettél, megtaláltam a hibát: hiányzott egy küldés engedélyezés: "BSF TXSTA,TXEN". Már müködik!!!
(#) Hp41C válasza kullers hozzászólására (») Aug 31, 2013 /
 
Nem tudom mit vergődsz a TRMIT -tel... Ez működik...
  1. ; sorosport proba.asm
  2. ; RA0 és 1 emenetek kapcsolóval
  3. ; RB0 és 7 kimenet leddel
  4. ; RC7 RX bemenet
  5. ; RC6 TX kimenet
  6. ; órajel 2MHz
  7. ; PROCESSOR 16F877
  8.  
  9.         list    p=16f877            ; list directive to define processor
  10.         #include "p16f877.inc"
  11.  
  12.         __CONFIG _CP_OFF &_CPD_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _LVP_OFF
  13.  
  14.         BCF STATUS,RP0
  15.         BCF STATUS,RP1 ;Bank0
  16.         CLRF PORTA
  17.         CLRF PORTB
  18.         CLRF PORTC
  19.         BSF STATUS,RP0
  20.         BCF STATUS,RP1 ;Bank1
  21.         MOVLW 0x06 ;00000110
  22.         MOVWF ADCON1 ;A port dig ki be menet legyen
  23.         MOVLW 0x03 ;00000011, W-be
  24.         MOVWF TRISA ;A bement
  25.         CLRF TRISB ;B kimenet
  26.         ;sorosport beállítások
  27.         MOVLW b'11000000'
  28.         MOVWF TRISC ;C porton 7 bit bemenet (RX) a többi kimenet
  29.         MOVLW 0x0C ;DEC12
  30.         MOVWF SPBRG ;Baudrate osztóhoz DEC12
  31.         MOVLW b'00100100' ;BRGH=1, TXEN=1
  32.         MOVWF TXSTA
  33.         BCF STATUS,RP0 ;Bank0
  34.         BCF STATUS,RP1
  35.         MOVLW b'10010000'
  36.         MOVWF RCSTA
  37.         BSF PORTB,0
  38.  
  39. SendMessage:   
  40.         MOVLW '1'
  41.         call Send
  42.         MOVLW '6'
  43.         call Send
  44.         MOVLW 'F'
  45.         call Send
  46.         MOVLW '8'
  47.         call Send
  48.         MOVLW '7'
  49.         call Send
  50.         MOVLW '7'
  51.         call Send
  52.         MOVLW 0x0D ; CR
  53.         call Send
  54.         MOVLW 0x0A ; LF
  55.         call Send
  56.         BSF PORTB,1
  57.         goto    SendMessage
  58.  
  59. Send:
  60.         btfss   PIR1,TXIF
  61.         goto    Send
  62.         movwf   TXREG
  63.         return
  64.  
  65.         END
(#) svandras0404 hozzászólása Szept 1, 2013 /
 
Üdv Mindenkinek
Megoldódott köszönöm.
Túl sok minden volt benne az előző progiból.
Gond nélkül lefordítja.
Köszönöm.
(#) svandras0404 hozzászólása Szept 1, 2013 /
 
Mégse jó csak azért fordította le mert a megszakított rész az END után volt.
  1. #include <p16F887.inc>
  2.         __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
  3.         __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
  4.  
  5. ADL             EQU     0x119  
  6. ADH             EQU     0X11A
  7. IDO1   EQU 0x24
  8. IDO2   EQU 0x25
  9. VALASZT  EQU 0X3D  
  10. TESZT  EQU 0X121
  11. TIMER0 EQU 0X23
  12. TIMER1 EQU 0X22
  13.  
  14.  
  15.         ORG     0X000  
  16.  
  17. START
  18.           CALL          WAIT
  19.          ;BANKSEL    OSCCON
  20.          ;MOVLW         B'00001110'  ;ÓRAJEL KIV.
  21.          ;MOVWF     OSCCON
  22.          BANKSEL    PORTC
  23.          CLRF           PORTC
  24.          BANKSEL    TRISC
  25.          MOVLW      B'00000000'
  26.          MOVWF      TRISC
  27.  
  28.  
  29.         BANKSEL         PORTA ;
  30.         CLRF            PORTA ;Init PORTA
  31.         BANKSEL         ANSEL ;
  32.         MOVLW           B'11001111'
  33.         MOVWF           ANSEL ;ANALOG I/O
  34.         BANKSEL         TRISA ;
  35.         MOVLW           B'11001111' ;0-3,6-7 inputs  4-BIT , 5bit OUTPUT
  36.         MOVWF           TRISA ;
  37.  
  38.          BANKSEl    PORTB
  39.          CLRF           PORTB
  40.      BANKSEL    ANSELH
  41.          MOVLW      B'00000000'
  42.          MOVWF      ANSELH
  43.          BANKSEL    TRISB
  44.          MOVLW      B'11000001'  ;3-IK BITET ÁTÍRTAM  VISSZAÍRTAM
  45.          MOVWF          TRISB
  46.  
  47.          BANKSEL    PORTD
  48.          CLRF       PORTD
  49.      BANKSEL    TRISD
  50.          MOVLW      B'00000000'
  51.          MOVWF          TRISD
  52.  
  53.          BANKSEL    PORTE
  54.          CLRF       PORTE
  55.          BANKSEL    ANSEL
  56.          CLRF       ANSEL
  57.      BANKSEL    TRISE
  58.          MOVLW      B'00000000'
  59.          MOVWF      TRISE
  60.          
  61.  
  62.         BANKSEL         OPTION_REG
  63.         BCF                     OPTION_REG,7     ;felhuzó ellenállás bekapcs
  64.  
  65.                 ;BANKSEL                WDTCON
  66.                 ;MOVLW          B'00010111'
  67.                 ;MOVWF          WDTCON
  68.         BANKSEL         PIE2
  69.         BSF                     PIE2,6
  70.         BANKSEL         PIR2
  71.         BCF                     PIR2,6    ;ÁT ÍRTAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  72.  
  73.         BANKSEL         INTCON
  74.         BSF                     INTCON,7
  75.         BSF                     INTCON,6
  76.  
  77.         BANKSEL         VALASZT
  78.         BSF                     VALASZT,0
  79.  
  80.         BANKSEL         IDO1
  81.         MOVLW           B'00000001'
  82.         MOVWF           IDO1
  83.  
  84.         BANKSEL         CM1CON0
  85.         MOVLW           B'10100001'
  86.         MOVWF           CM1CON0
  87.        
  88.         BANKSEL         CM2CON0
  89.         MOVLW           B'10100000'
  90.         MOVWF           CM2CON0
  91. ;----------------------------------------------INICIALIZALAS VEGE -------------------------------------------------------------------
  92.  
  93. ;---------------------------------------------- FŐ HUROK-----------------------------------------------------------------------------
  94. QW
  95.         BANKSEL         PORTC
  96.         CLRF            PORTC
  97. QQ     
  98.         MOVLW           B'00000011'
  99.         MOVWF           PORTC
  100.         ;NOP                 ; töltődik
  101.         CLRF            PORTC   ;középen
  102.         CALL            WA
  103. KK
  104.         MOVLW           B'00001100'
  105.         MOVWF           PORTC        ;kisül
  106.         CLRF            PORTC
  107.         GOTO            QQ
  108. ;------------------------------------------------FŐ HUROK VÉGE ---------------------------------------------------------------------
  109. ;------------------------------------------------ SZABÁLYZÁS -----------------------------------------------------------------------
  110. NOV
  111.         BSF                     VALASZT,0
  112.         INCFSZ          IDO1      
  113.         GOTO            QZ                                     
  114.         DECF            IDO1
  115.         GOTO            QZ
  116. ;----------------------------------------------------------------------------------------------------------------------------
  117. CSOKK
  118.         BTFSS           VALASZT,0
  119.         GOTO            QZ
  120.         DECFSZ          IDO1
  121.         GOTO            QZ
  122.         CLRF            VALASZT
  123.         GOTO            QZ
  124. ;--------------------------------------------------- SZABÁLYZÁS VÉGE ---------------------------------------------------------------
  125. ;---------------------------------------------------VÁRAKOZÁS SZUBRUTINOK-----------------------------------------------------------
  126. WA
  127.         BTFSS           VALASZT,0
  128.         RETURN
  129.         MOVFW           IDO1
  130.         MOVWF           IDO2
  131.         MOVLW           0X01
  132. WC
  133.         SUBWF           IDO2
  134.         BTFSS           STATUS,2
  135.         GOTO            WB
  136.         RETURN
  137. WB
  138.         BTFSC           STATUS,0
  139.         GOTO            WC
  140.         CLRF            IDO2
  141.         RETURN
  142. ;----------------------------------------------------------------------------------------------------------------
  143. WAIT
  144.         BCF                     STATUS,RP0
  145.         BCF                     STATUS,RP1
  146.         MOVLW   0xFF
  147.         MOVWF   TIMER0
  148.         MOVLW   0x03
  149.         MOVWF   TIMER1
  150.        
  151. DLY1
  152.         NOP
  153.         DECFSZ  TIMER0,F
  154.         GOTO    DLY1
  155.         DECFSZ  TIMER1,F
  156.         GOTO    DLY1
  157.         RETURN 
  158.  
  159. ;-----------------------------------------------VÁRAKOZÁS SZUBRUTINOK VÉGE -----------------------------------------
  160.  
  161. ;----------------------------------------------MEGSZAKÍTÁS ---------------------------------------------------------
  162.         ORG      0x04
  163.         ;RETFIE
  164.  
  165.         BTFSS           PORTA,5
  166.         RETFIE
  167. QT
  168.         BANKSEL         PORTC
  169.         CLRF            PORTC
  170. QZ     
  171.         MOVLW           B'00000011'
  172.         MOVWF           PORTC   ;PRIMER
  173.         CLRF            PORTC   ;középen
  174.         CALL            WA
  175.         MOVLW           B'00001100'  ;SZEKUNDER
  176.         MOVWF           PORTC        ;kisül
  177.         CLRF            PORTC        ;KÖZÉPEN
  178.         BTFSS       PORTA,4
  179.         GOTO            NOV
  180.         BTFSS           PORTA,5
  181.         GOTO            CSOKK
  182.         RETFIE
  183.         END



;-------------------------------------------------------------------------------------
Message[305] C:\USERS\ANDRAS\DOCUMENTS\ASM\REPKOND2\ADC.ASM 112 : Using default destination of 1 (file).
Message[305] C:\USERS\ANDRAS\DOCUMENTS\ASM\REPKOND2\ADC.ASM 114 : Using default destination of 1 (file).
Message[305] C:\USERS\ANDRAS\DOCUMENTS\ASM\REPKOND2\ADC.ASM 120 : Using default destination of 1 (file).
Message[305] C:\USERS\ANDRAS\DOCUMENTS\ASM\REPKOND2\ADC.ASM 133 : Using default destination of 1 (file).
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F887 "adc.o" /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /z__MPLAB_DEBUGGER_PICKIT2=1 /z__ICD2RAM=1 /o"adc.asm.cof" /M"adc.asm.map" /W
MPLINK 4.43, Linker
Device Database Version 1.9
Copyright (c) 1998-2011 Microchip Technology Inc.
Error - section '.org_1' can not fit the absolute section. Section '.org_1' start=0x00000004, length=0x00000022
Errors : 1

Link step failed.
----------------------------------------------------------------------
Debug build of project `C:\Users\andras\Documents\ASM\repkond2\adc.asm.mcp' failed.
Language tool versions: MPASMWIN.exe v5.46, mplink.exe v4.44, mplib.exe v4.44
Preprocessor symbol `__DEBUG' is defined.
Target debug platform is `__MPLAB_DEBUGGER_PICKIT2=1'.
Debug platform options are: `__ICD2RAM=1'.
Sun Sep 01 10:16:43 2013
----------------------------------------------------------------------
BUILD FAILED
(#) Sasmadár válasza svandras0404 hozzászólására (») Szept 1, 2013 /
 
Szia!
A megszakítást (0x04-tő)l olyan helyre akarod fordíttatni, ahová a fordító már generált kódot.
ORG 0x0-ra tegyél egy GOTO START utasítást, a START elé pedig pl. ORG 0x100-at. Így nem ütközik a megszakítással.
(#) _vl_ válasza Sasmadár hozzászólására (») Szept 1, 2013 /
 
A "klasszikus" megoldás az, hogy elöl van a kódban az interrupt rutin, aztán a főprogram az általad leírt módszerrel:
  1. ORG 0x0
  2. GOTO START
  3.  
  4. ORG 0x4
  5. ; interrupt handler
  6. ...
  7. RETFIE
  8.  
  9. ; main
  10. START
  11. ...
(#) svandras0404 hozzászólása Szept 1, 2013 /
 
Hálás köszönet ez volt a gond.
VL_ megoldását választottam.
Szépen lefordította.
(#) Attila86 válasza Attila86 hozzászólására (») Szept 2, 2013 /
 
Sajnos rosszul számoltam. Előbb kell gyököt vonnom és utána osztanom nem pedig fordítva. Így viszont a szám amiből gyököt kell vonnom még nagyobb és nem elég a 4 bájt. 5 bájtból (34 bitből) kellene négyzetgyököt vonnom assembly-ben. Na, ilyen rutint nem nagyon találok. Eddig 32 bit a legnagyobb amibe belebotlottam a neten.
(#) Hp41C válasza Attila86 hozzászólására (») Szept 2, 2013 /
 
sqrt (A) / B = sqrt (A / (B * B))...
(#) Attila86 válasza Hp41C hozzászólására (») Szept 2, 2013 /
 
Hmm, mondasz valamit!
A gyökvonás után 10-zel kellene osztanom egyébként, de a gyökvonás után és az osztás közt még hozzáadnék 5-öt a kerekítés miatt. Így most akkor mennyit kellene hozzáadnom és mihez?
A hozzászólás módosítva: Szept 2, 2013
(#) Lvone hozzászólása Szept 4, 2013 /
 
Sziasztok!

MikroC-t használ valaki közületek? Azon belül HW-es I2C libraryt? TM1636-hoz kellene.
Adatlapról a kód, picit már átírva MikroC-re. Működik, csak jobb szeretném HW I2-c-re tenni.
  1. void I2CWrByte(unsigned char oneByte) // Write a byte
  2. {
  3.  unsigned char i;
  4.  for(i=0;i<8;i++)
  5.    {
  6.     clk = 0;
  7.     if(oneByte & 0x01) // Low in the front
  8.       {
  9.         dio = 1;
  10.        }
  11.     else
  12.       {
  13.         dio = 0;
  14.        }
  15.     Delay_us(3);
  16.     oneByte=oneByte>>1;
  17.     clk=1;
  18.     Delay_us(3);
  19.    }
  20. }

Ez egy saját szoftveres I2c írás, majd utána várja az ACk-t egy függvény:
  1. void I2Cask(void) //1636 Answer
  2. {
  3.   clk = 0;
  4.   Delay_us(5); // In eighth after the falling edge of the clock delay 5us,
  5.              //   began to determine ACK signal
  6.   DIO_io=1; //DIO pin inputra állítva
  7.   while(dio);
  8.   clk = 1;
  9.   Delay_us(2);
  10.   DIO_IO=0;  //DIO pin outputra állítva
  11.   clk=0;
  12. }


Ezt a 8. bit utáni ACK visszatérést hogy lehetne megoldani hardware-esen? Regisztert török? Vagy stop, és következő újra kiír? Vagy idle? Vissza nem kell adat, csak küldök. ACk nélkül viszont nem megy.
A hozzászólás módosítva: Szept 4, 2013
(#) GPeti1977 hozzászólása Szept 10, 2013 /
 
Lenne egy CEREBOT MX7CK fejlesztő panelem de sajnos nem tudom használni, mert az MPLAB X V1.85 ezzel a hibával dobja ki:
"PICkit 3 firmware too old", az MPLAB IPE-vel sem működik.
Mit lehetne csinálni?
(#) icserny válasza GPeti1977 hozzászólására (») Szept 10, 2013 /
 
Sajnos, nekem nincs ilyen, de a leírását könnyű megtalálni. Eszerint MPLAB 8.63-mal biztosan megy (de az újabbakkal is mennie kellene), de a menüben nem PICkit3-at, hanam "Licensed Debugger"-t kell kiválasztani.

Az MPLAB és a fordítók régebbi verziói erről az oldalról tölthetők le.
(#) GPeti1977 válasza icserny hozzászólására (») Szept 10, 2013 /
 
"Licensed Debugger"-t választottam ki, ezért is nem értem miért PIC kit a hibaüzenet.
A hozzászólás módosítva: Szept 10, 2013
(#) Hp41C válasza GPeti1977 hozzászólására (») Szept 10, 2013 /
 
Ha jól nézem a fémyképét, a "Debugging cicruit" helyén egy PIC24FJ256GB106 ül... Ilyen van a PICkit3 -ban is...
(#) GPeti1977 válasza Hp41C hozzászólására (») Szept 10, 2013 /
 
Igen tényleg az van benne, akkor arra kéne valami újat rá flesselni?
(#) Attila86 hozzászólása Szept 11, 2013 /
 
PIC18F25K80-ról van szó.
Írogatok egy programot, amiben van egy olyan rész hogy az HLVD modul a PIC tápfeszének megszűnésekor megszakítást generál, majd a megszakításban elment az EEPROM-ba kb 18-20 bájtot. Bekapcsoláskor pedig, amikor újból tápfeszültséget kap az áramkör akkor betölti az EEPROM-ból az elmentett regisztereket a memóriába és onnan dolgozik szépen tovább. Ez így szuperül működik is, azonban néha az egyik regiszter (pont az egyébként amit utoljára mentek el), nem azt tartalmazza amit kellene. Próbáltam debuggerben megnézni mi történik de ott nem szűntethetem meg a PIC tápját mert akkor leáll a debuggolás is ugyebár. Ezért beírtam pár sort pluszban a programba hogy ha az áramkörben lévő egyik csati két lábát rövidre zárom akkor hívja meg ugyan azt az EEPROM-ba elmentő szubrutint mint amit a HLVD modul hív meg a megszakításban, majd ugorjon a PIC resetvektorra. Így a debuggolás már nem áll meg és ellenőrizni tudnám hogy pontosan mi is történik, de így nem jön elő a hiba! Gondolkodtam rajta hogyan lehetne még rájönni; beleégettem a programot a PIC-be és programozási módba léptem hogy a PICkit3 csak tápfeszt adjon az áramkörnek, a PIC magától tudjon futkározni. Ekkor lehúztam a PICkit3-at az áramkörről majd újra rádugtam (tápfesz le majd vissza) aztán beolvastam az EEPROM tartalmát, és a kérdéses bájt FF volt! Pedig 00-nak kellett volna lennie. Ötlet hogy mi lehet a gond? Arra is gondoltam hogy megváltoztatom a bájtok EEPROM-ba való elmentésének sorrendjét hogy ne ez a bájt legyen az utolsó hanem egy másik, ez esetben az a másik bájt lett a hibás. Ekkor arra gyanakodtam hogy talán pont akkor szűnik meg a PIC tápfesze annyira hogy már nem tudja azt az utolsó bájtot megírni. Ezért próbaképp írtam pár sort ami teleírja az EEPROM-ot amíg csak le nem kapcsol a PIC teljesen. Nos nem emlékszem már pontosan de kb 350 bájtot sikerült megírnia úgyhogy ez a hibalehetőség kizárva.
(#) _vl_ válasza Attila86 hozzászólására (») Szept 11, 2013 /
 
Annyit még kipróbálhatsz, hogy az utolsó írás után a címregisztert átírod, hogy akkor az átírt verzió szerinti byte romlik el, vagy az utoljára írott. Az első esetben valami random történés generál egy írásműveletet, a második verzió esetében viszont az utolsó írás valamiért nem fejeződik be rendesen, mire elmegy az áram.
(#) ktamas66 válasza Attila86 hozzászólására (») Szept 11, 2013 /
 
Írj plusz két bájtot (pl.: 55,00), így az újraindított program ellenőrizni tudja, hogy a mentés teljesen lefutott (55). Visszatöltés után töröld az 55-öt (vagy átírod AA-ra).
(#) Kisvé hozzászólása Szept 16, 2013 /
 
Helló!
Nincs valakinek valamilyen új információja a PIC32MZ-ről?
(#) szuperman hozzászólása Szept 18, 2013 /
 
Helló mindenki!

A hangkártyámat, hogy tudnám rákötni egy PIC -re? Szeretnék valami látványos hangulatvilágítást készíteni. LED szalag, PIC. Ha zenét hallgatok villoghatna zenére a LED szalag, amúgy meg a PIC villogtathatná stb.

Előre is köszi!
(#) potyo válasza szuperman hozzászólására (») Szept 18, 2013 /
 
Egy analóg bemenetet vagy esetleg egy komparátort használhatsz ilyen célra.
(#) icserny válasza szuperman hozzászólására (») Szept 18, 2013 /
 
Idézet:
„A hangkártyámat, hogy tudnám rákötni egy PIC -re?”
A hangártya kimenő jelét a PIC ADC-je tudja fogadni. Esetleg egy műveleti erősítő kellhet közéjük...
(#) szuperman válasza icserny hozzászólására (») Szept 18, 2013 /
 
Olyasmire gondoltam, hogy basszusra villoghatna. Tehát logikai egyes jelenjen meg ritmusra, mint a kivezérlés jelzőnél. A hangkártyából milyen feszültségszintek érkeznek?
(#) Wudoou hozzászólása Szept 18, 2013 /
 
Sziasztok!
Egy kis segítségre lenne szükségem.
Valaki tudna magyarázatot adni arra, hogy van egy PIC16f886+4x20lcd+16darab ds18b20.
Amikor feszültség alá helyezem, akkor nagyon ritkán, 10-ből 1x nem ír ki semmit az lcd így azt sem tudom, hogy elindult e a program, vagy mi történik.
A kijelző háttérvilágítás az bekapcsol, de nem látszik semmi.
Valami az inicializálással lehet? Csatolom a config biteket.
  1. __CONFIG(FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_ON & CPD_OFF & CP_OFF & BOREN_ON & IESO_ON & FCMEN_ON & LVP_OFF & BOR4V_BOR40V);
(#) potyo válasza Wudoou hozzászólására (») Szept 18, 2013 /
 
Inkább az LCD inicializálása lehet a gond. Megcsinálod azt, hogy háromszor egymás után 8 bitessé inicializálod, és ha négy bitesként akarod kezelni, akkor csak ezután inicializálod négy bitessé, mint ebben az adatlapban a 45. és 46. oldalakon mutatja a folyamatábra?
(#) Wudoou válasza potyo hozzászólására (») Szept 18, 2013 /
 
Csatolom az lcd.c kódot:
  1. #include <htc.h>
  2. #include "vdelay.h"
  3. #define _XTAL_FREQ 4000000
  4. #define lcd_data PORTB
  5. #define lcd_rs RB7
  6. #define lcd_en RB6
  7. #define lcd_bl RB5
  8. #define lcd_enable() ((NOP()),(lcd_en=1),(NOP()),(NOP()),(lcd_en=0))
  9. void lcd_write(unsigned char c);
  10.  
  11. void lcd_init(void){
  12. lcd_rs=0;
  13. lcd_en=0;
  14. vWait_ms(16);
  15. lcd_data=0x0C;
  16. lcd_enable();
  17. vWait_ms(5);
  18. lcd_enable();
  19. vWait_us(150);
  20. lcd_enable();
  21.  
  22. lcd_write(0x28);
  23. lcd_write(0x0C);
  24. lcd_write(0x06);
  25. lcd_bl=1;
  26. }
  27.  
  28. void lcd_write(unsigned char c)
  29. {      
  30.      unsigned char x=0,y=0;
  31.          x =((c<<3)&0b10000000);
  32.          x|=((c<<1)&0b01000000);
  33.          x|=((c>>1)&0b00100000);
  34.          x|=((c>>3)&0b00010000);
  35.          y =((c>>3)&0b00000001);
  36.          y|=((c>>1)&0b00000010);
  37.          y|=((c<<1)&0b00000100);
  38.          y|=((c<<3)&0b00001000);       
  39.        
  40.         __delay_us(40);
  41.         lcd_data = (lcd_data & 0xF0) | (x >>4); //felso 4 bit
  42.         lcd_enable();
  43.         lcd_data = (lcd_data & 0xF0) | (y & 0x0F);      //alsó 4 bit
  44.         lcd_enable();
  45. }
  46.  
  47.  
  48. void lcd_clear(void){
  49. lcd_rs=0;
  50. lcd_write(0x01);
  51. vWait_ms(2);
  52. }
  53.  
  54. void lcd_goto(unsigned char g){
  55. lcd_rs=0;
  56. lcd_write(0x80+g);
  57. }
  58.  
  59. void lcd_putch(char c){
  60. lcd_rs=1;
  61.         switch(c){
  62.         case 'ü': lcd_write(0x00); break;
  63.         case 'u': lcd_write(0x01); break;
  64.         case 'ö': lcd_write(0x02); break;
  65.         case 'ő': lcd_write(0x03); break;
  66.         case 'ó': lcd_write(0x04); break;
  67. //      case 'ú': lcd_write(0x05); break;
  68.         case 'í': lcd_write(0x06); break;
  69.         case 'á': lcd_write(0x07); break;
  70.         case 'é': lcd_write(0x05); break;
  71.         default: lcd_write(c);
  72.         }
  73. }
  74.  
  75. void lcd_puts(const char *s){
  76. lcd_rs=1;
  77.         while(*s){
  78. //      vWait_ms(60);
  79.         lcd_putch(*s++);
  80.         }
  81. vWait_us(10);
  82. }
  83.  
  84. void lcd_dec(unsigned char cim, unsigned char szam){
  85.         if(szam>=100){
  86.         lcd_goto(cim);
  87.         lcd_putch(szam/100+48);
  88.         }
  89.         else{
  90.         lcd_goto(cim);
  91.         lcd_putch(' ');
  92.         }
  93.         if(szam>=10){
  94.         lcd_putch((szam%100)/10+48);
  95.         }
  96.         else{
  97.         lcd_putch(' ');
  98.         lcd_goto(cim+2);
  99.         }
  100. lcd_putch((szam%100)%10+48);
  101. }
  102.  
  103. void lcd_init_cgram(void){
  104. lcd_rs=0;
  105. const unsigned char cgram[]={
  106. 0x0a,0x00,0x11,0x11,0x11,0x13,0x0d,0x00,        //ü
  107. 0x05,0x0a,0x11,0x11,0x11,0x13,0x0d,0x00,        //u
  108. 0x0a,0x00,0x0e,0x11,0x11,0x11,0x0e,0x00,        //ö
  109. 0x05,0x0a,0x00,0x0e,0x11,0x11,0x0e,0x00,        //o
  110. 0x02,0x04,0x00,0x0e,0x11,0x11,0x0e,0x00,        //ó
  111. //0x02,0x04,0x11,0x11,0x11,0x13,0x0d,0x00,      //ú
  112. 0x02,0x04,0x0e,0x11,0x1f,0x10,0x0e,0x00,
  113. 0x02,0x04,0x00,0x04,0x0c,0x04,0x0e,0x00,        //í
  114. 0x02,0x04,0x0e,0x01,0x0f,0x11,0x0f,0x00};       //á
  115. lcd_write(0x40);
  116.         for(unsigned char cgindex=0;cgindex<=63;cgindex++){
  117.         lcd_putch(cgram[cgindex]);
  118.         }
  119. lcd_goto(0x00);
  120. }
  121.  
  122. void lcd_senddecimal(int data, char elojel){
  123.  static char sign, s[12];
  124.  unsigned int i;
  125.      i=0; sign='+';
  126.     if(data<0) { sign='-'; data = -data;}
  127.      do {
  128.         s[i]=data%10 + '0';
  129.         data=data/10;
  130.         i++;
  131.  
  132.      } while(data>0);
  133.      if(elojel==0) lcd_putch(sign);
  134.      do{
  135.                 lcd_putch(s[--i]);
  136.         } while(i);
  137. }


Itt meg az lcd.h kód:
  1. extern void lcd_write(unsigned char c);
  2. extern void lcd_init(void);
  3. extern void lcd_clear(void);
  4. extern void lcd_goto(unsigned char g);
  5. extern void lcd_putch(unsigned char c);
  6. extern void lcd_puts(const char *s);
  7. extern void lcd_dec(unsigned char cim, unsigned char szam);
  8. extern void lcd_init_cgram(void);
  9. extern void lcd_senddecimal(int data, char elojel);
(#) potyo válasza Wudoou hozzászólására (») Szept 18, 2013 /
 
Idézet:
„Megcsinálod azt, hogy háromszor egymás után 8 bitessé inicializálod, és ha négy bitesként akarod kezelni, akkor csak ezután inicializálod négy bitessé?”


Tehát?
(#) Wudoou válasza potyo hozzászólására (») Szept 18, 2013 /
 
  1. lcd_data=0x0C;
  2. lcd_enable();
  3. vWait_ms(5);
  4. lcd_enable();
  5. vWait_us(150);
  6. lcd_enable();

Elvileg ez 3x megcsinálja.
(#) Wudoou válasza potyo hozzászólására (») Szept 18, 2013 /
 
Esetleg valami ötletetek nincs? Ugyanezt a kódot használom 2x16 lcd-re is. Ott nincs ilyen gond.
Következő: »»   1135 / 1318
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem