Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   527 / 1210
(#) mps válasza Birs Alma hozzászólására (») Máj 20, 2014 /
 
Gyakorlatilag egy stabilizátort csinálsz mint ez a vs-re megy az ellenőrizendő feszültséh, a Vz pedig a pic bemenetére.
Azért kell a zener, hogy ne tudjon a pic bemenetén nagyobb feszültség kialakulni, megfogja a zener feszültségénél. (Bár elméletileg a láb védő diódái megfogják, de azért erre nem illik rábízni.)
(#) Birs Alma válasza mps hozzászólására (») Máj 20, 2014 /
 
Köszönöm!
(#) zalan888 hozzászólása Máj 20, 2014 /
 
Hali.
Valaki tudna ajánlani valami jó könyvet (magyarul) a mikrokontrollerekről és azok programozásáról? Nyilván tudom, hogy nem fogok tudni programozni egy könyv elolvasása után és nyilván rengeteg nyelven lehet programozni, csak egyfajta rálátást szeretnék kapni, mert hiába olvasok össze-vissza mindenféle pdf-et nem tudom hol fogjam meg az elejét.
(#) CHrissDock válasza vilmosd hozzászólására (») Máj 20, 2014 /
 
hmmmm....na akkor utána nézek jobban majd mert nekem csak annyit mondtak hogy a programot írjam át mert a dc-ewa11 kijelzőhöz nem jó.....majd írom a fejleményeket ...addig is köszönöm az infot0
(#) Birs Alma válasza mps hozzászólására (») Máj 20, 2014 /
 
Kicsit sokat fogyaszt ez a kapcsolás. 1-2 mA lenne jó, max.
(#) Zsora válasza Birs Alma hozzászólására (») Máj 20, 2014 /
 
2 lehetséges megoldás:

Kapcs.png
    
(#) Birs Alma válasza Zsora hozzászólására (») Máj 20, 2014 /
 
Köszönöm!
(#) KaiserA válasza Hp41C hozzászólására (») Máj 21, 2014 /
 
Szia!

Képzeld működik a kijelző! Köszönöm a segítséget!!! csak egy kicsi szépség hiba van és nem tudom , hogy mi a baj. Köszönöm az eddigi segítségedet! A programban kommentként írtam hogyha kivesem azt a sort, akkor az LCD hülyeséget ír ki, ha benen hagyom, akkor pedig nagyábból láthatatan módon frissül, de kiírja amit akarok. Mi lehet a baj?
  1. /*
  2. LCD.c
  3. For the NU32 PIC32 Board
  4. Write to an HD44780 LCD in 4bit mode with no reading back data
  5. */
  6.  
  7. #include "Compiler.h"
  8. #include "HardwareProfile.h"
  9. #include <plib.h>
  10.  
  11. #include "lcd2.h"
  12.  
  13. // Define constants for PINS
  14. #define DB0      LATFbits.LATF0
  15. #define DB1      LATDbits.LATD7
  16. #define DB2      LATDbits.LATD6
  17. #define DB3      LATDbits.LATD5
  18.  
  19. #define DB4      LATDbits.LATD4
  20. #define DB5      LATDbits.LATD3
  21. #define DB6      LATDbits.LATD2
  22. #define DB7      LATDbits.LATD1
  23.  
  24.  
  25. #define RS       LATFbits.LATF1
  26. //#define LCD_RW       LATDbits.LATD9
  27. #define EN       LATEbits.LATE0
  28.  
  29. void setupLCD()
  30. {
  31.    
  32.     //Register pins
  33.     TRISFbits.TRISF1 = 0;
  34.     //TRISGbits.TRISG13 = 0;
  35.     TRISEbits.TRISE0 = 0;
  36.  
  37.     //Data pins
  38.     TRISFbits.TRISF0 = 0;
  39.     TRISDbits.TRISD1 = 0;
  40.     TRISDbits.TRISD2 = 0;
  41.     TRISDbits.TRISD3 = 0;
  42.     TRISDbits.TRISD4 = 0;
  43.     TRISDbits.TRISD5 = 0;
  44.     TRISDbits.TRISD6 = 0;
  45.     TRISDbits.TRISD7 = 0;
  46.    
  47.     //WAIT 20ns
  48.         Delayms(20);
  49.  
  50.     EN = 0;
  51.  
  52.         putsLCD(" "); // ENNÉL A RÉSZNÉL HA EZT KIVESZEM AKKOR HÜLYESÉGET ÍR ki  a kijelző, ha benne hagyom akkor kicsi gondolkodás után kiirja amit akarok.
  53.         Delayms(20);
  54.    
  55. }
  56. short const LCD_INIT_STRING[4] =
  57. {
  58.  0x20| (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
  59.  0xc,                    // Display on
  60.  1,                      // Clear display
  61.  6                       // Increment cursor
  62.  };
  63.  
  64. //----------------------------
  65. void lcd_init(void)
  66. {
  67.    short i;
  68.    
  69.    //Set D0-4,D9-10 as a digital output, change if you change the pins
  70.    
  71.    LATD |= 0x061F; TRISD &= 0xF9E0;
  72.  
  73.    // works fine off 3.3V, in fact the following line kills the timing
  74.    //mPORTDOpenDrainOpen(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_9 | BIT_10);
  75.  
  76.    Delayms(30);
  77.  
  78.    RS = LOW; // Register Select Command Register
  79.  
  80.    //#ifdef USE_LCD_RW
  81.    //LCD_RW = LOW;
  82.    //#endif
  83.  
  84.    EN = LOW; // Disable
  85.  
  86.    Delayms(15);
  87.  
  88.    for(i=0; i < 3; i++)
  89.       {
  90.        lcd_send_nibble(0x03);
  91.        Delayms(4);
  92.       }
  93.    
  94.    lcd_send_nibble(0x02);
  95.    
  96.    for(i=0; i < sizeof(LCD_INIT_STRING); i++)
  97.       {
  98.        lcd_send_byte(0, LCD_INIT_STRING[i]);
  99.      
  100.        // If the R/W signal is not used, then
  101.        // the busy bit can't be polled.  One of
  102.        // the init commands takes longer than
  103.        // the hard-coded delay of 60 us, so in
  104.        // that case, lets just do a 5 ms delay
  105.        // after all four of them.
  106.        //#ifndef USE_LCD_RW
  107.        Delayms(5);
  108.        //#endif
  109.       }
  110.    Delayms(5);
  111.    putsLCD("\f");
  112.    Delayms(5);
  113. }
  114.  
  115. //-------------------------------------
  116. void lcd_send_nibble(short nibble)
  117. {
  118. // Note:  !! converts an integer expression
  119. // to a boolean (1 or 0).
  120.  DB4 = !!(nibble & 1);
  121.  DB5 = !!(nibble & 2);
  122.  DB6 = !!(nibble & 4);  
  123.  DB7 = !!(nibble & 8);  
  124.  
  125.  Delaytus(1);
  126.  EN = HIGH; // Enable
  127.  Delayus(2);
  128.  EN = LOW; // Disable
  129. }
  130.  
  131. //----------------------------------------
  132. // Send a byte to the LCD.
  133. void lcd_send_byte(short address, short n)
  134. {
  135.    RS = LOW;
  136.  
  137.    // Need to investiage bit_test
  138.    //#ifdef USE_LCD_RW
  139.    //while(bit_test(lcd_read_byte(),7)) ;
  140.    //#else
  141.    Delayms(1);
  142.    //#endif
  143.  
  144.    if(address)
  145.       RS = HIGH;
  146.    else
  147.       RS = LOW;
  148.        
  149.    Delaytus(1);
  150.  
  151.    //#ifdef USE_LCD_RW
  152.    //LCD_RW = LOW;
  153.    //Delaytus(1);
  154.    //#endif
  155.  
  156.    EN = LOW;
  157.    
  158.    lcd_send_nibble(n >> 4);
  159.    lcd_send_nibble(n & 0xf);
  160. }
  161.  
  162. //-----------------------------
  163. void putsLCD(char *s)
  164. {    
  165.    while( *s != '\0')
  166.    {  
  167.       switch(*s)
  168.       {
  169.          case '\f':            // Clear, go to First Line
  170.           {
  171.             lcd_send_byte(0,1);
  172.                Delayms(2);
  173.                break;
  174.             }
  175.           case '\n':            // Next Line
  176.           {
  177.             lcd_gotoxy(1,2);
  178.              break;
  179.          }
  180.           case '\b':
  181.           {
  182.             lcd_send_byte(0,0x10);
  183.              break;
  184.             }
  185.           default:
  186.           {
  187.             lcd_send_byte(1,*s);
  188.              break;
  189.           }
  190.       }
  191.       s++;
  192.       Delayus(10);
  193.    }
  194. }
  195. //----------------------------
  196.  
  197. void lcd_gotoxy(short x, short y)
  198. {
  199.    short address;
  200.    
  201.    if(y != 1)
  202.       address = lcd_line_two;
  203.    else
  204.       address=0;
  205.    
  206.    address += x-1;
  207.    lcd_send_byte(0, 0x80 | address);
  208. }
  209.    
  210. //==========================
  211.  
  212. void Delayms( unsigned t)
  213. // This uses Timer 1, can be changed to another timer. Assumes FPB = SYS_FREQ
  214. {
  215.     OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
  216.     while (t--)
  217.     {  // t x 1ms loop
  218.         WriteTimer1(0);
  219.         while (ReadTimer1() < FPB/256/1000);
  220.    }
  221.    CloseTimer1();
  222. } // Delayms
  223.  
  224. void Delayus( unsigned t)
  225. {
  226.    OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
  227.     while (t--)
  228.     {  // t x 1ms loop
  229.         WriteTimer1(0);
  230.         while (ReadTimer1() < FPB/256/1000000);
  231.    }
  232.    CloseTimer1();
  233. }// Delayus
  234.  
  235. void Delaytus( unsigned t)
  236. {
  237.    OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
  238.     while (t--)
  239.     {  // t x 1ms loop
  240.         WriteTimer1(0);
  241.         while (ReadTimer1() < FPB/256/10000000);
  242.    }
  243.    CloseTimer1();
  244. }// Delaytus



MAIN.c
  1. int main()
  2.                 {
  3.                 //SYSTEMConfigPerformance(SYS_FREQ);
  4.                 SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
  5.                  
  6.         setupLCD();
  7.                         lcd_init();
  8.                     init();
  9.  
  10.        
  11.  
  12.  
  13.                 while(1)
  14.                                 {
  15.                                        
  16.                                                        
  17.                                                 LED_TOGGLE(LED1);
  18.                                         DelayMS(20);
  19.                                                 LED_TOGGLE(LED2);
  20.                                         DelayMS(20);
  21.                                                 LED_TOGGLE(LED3);
  22.                                        
  23.                                                 DelayMS(20);
  24.  
  25.                                                 putsLCD("\f");
  26.                                                 putsLCD("Mukodik");
  27.                                                 putsLCD("\n");
  28.                                                 putsLCD("a kijelzo");
  29.                                                 DelayMS(100);
  30.                        
  31.                                        
  32.                                                 }
  33.  
  34.  
  35.                                 }
A hozzászólás módosítva: Máj 21, 2014
(#) Baxi hozzászólása Máj 21, 2014 /
 
Hi Mesterek!
Olyan kérdésem lenne, hogy van nekem egy PT100-asom. Ezt hogy lehetne a pic A/D lábára kötni.
Keresgéltem de nem találtam semmit
Segítséget előre is köszönöm.
(#) eSDi válasza Baxi hozzászólására (») Máj 21, 2014 /
 
Üdv!

Pedig elég sok minden fellelhető róla. Csinálsz egy stabil 1mA-es áramgenerátort, ezt az 1mA-t áthajtod a PT100-on (ez lesz a mérő áram). A PT100-on eső feszültséget feletősíted, szűrüd, stb., majd a PIC A/D bemenetére vezeted.

Képlet a számításhoz:
R= R0 + T X R0 X 0,00385

ahol

R a hőérzékelő ellenálása
R0 ugyan ez csak nulla °C-on (PT100 esetén 100Ω)
T a kivánt hőmérséklet
(#) NyariG válasza Baxi hozzászólására (») Máj 21, 2014 /
 
Vagy veszel egy MAX31865-öt és lekérdezet spi-n.

pl, ezt.
(#) KaiserA hozzászólása Máj 21, 2014 /
 
Sziasztok!
Azt szeretném megkérdezni, hogy PIC32-nél az ADC-zést hogy állítim be a konfidurácionál.
CCS-nél:
  1. SETUP_ADC(ADC_CLOCK_INTERNAL);                 
  2.                  SETUP_ADC_PORTS(AN0_TO_AN1|VSS_VDD);


C32-nél, mi a szintaktika?

Köszönöm szépen!!!!
(#) Baxi válasza eSDi hozzászólására (») Máj 21, 2014 /
 
ok, kösz. Kerestem itt a fórumon de csak PT1000 találtam. Nekilátok annak az áramgenerátornak
A hozzászólás módosítva: Máj 21, 2014
(#) vilmosd válasza Baxi hozzászólására (») Máj 21, 2014 / 1
 
Ezt nezd meg. A kornyeken meg C forrast is talalsz.
(#) vilmosd válasza zalan888 hozzászólására (») Máj 21, 2014 /
 
(#) usane válasza KaiserA hozzászólására (») Máj 21, 2014 / 1
 
(#) eSDi válasza Baxi hozzászólására (») Máj 21, 2014 /
 
Igazából teljesen mindegy, hogy PT100, vagy PT1000, vagy PT"akármi". Az összes platina szenzort ugyan ezzel a módszerrel kell illeszteni. Amit vilmosd linkelt, az egy jó kiindulási pont.
(#) KaiserA hozzászólása Máj 21, 2014 /
 
Helo!

Azt szeretném megkérdezni, hogy valaki ismeri e C32 programkódot, mert ccs-ben egy PIC18F4550 sikerült egy MCP9808 típusú hőmérséklet szenzort beállítani. és ugyanezt a szenzort most bekötöttem egy PIC32MX440F típusú PIC-hez. Valaki tudna egy kis segítségel szolgálni ,hogy hogy mi a CCS C-kód C32-es megfelelője: Itt tartok:
  1. #zero_ram                                                                                      
  2. #include <h fileok/18F4550.h>                                          
  3. #DEVICE ADC=10                                                                         
  4. #include <h fileok/stdio.h>                                                    
  5. #include <string.h>                                                                    
  6. #include <h fileok/float.h>    
  7. #use i2c(master,sda=PIN_B0, scl=PIN_B1)
  8. #define SLAVE_ADDRESS 0x3F
  9.  
  10. #fuses HS,BROWNOUT,NOPUT,NODEBUG,NOWDT                         
  11. #use delay(clock=24000000)                                             
  12. #include <lcd.c>                                                               
  13. #include <h fileok/prototypes.h>
  14. unsigned char felsosor[16];            
  15. unsigned char alsosor[16];             
  16. int8 a=0;      
  17. unsigned long beolvasas=0;
  18. float hom=0;                                           
  19. float tullepes=0;
  20. unsigned long fogadottadat=0;
  21. unsigned long fogadottadat2=0;
  22. unsigned long lofasz=0;
  23. float Temperature=0;
  24.  
  25. while(1)
  26.                 {
  27.                                                
  28.                 i2c_start();
  29.                 i2c_write(SLAVE_ADDRESS & 0xFE);
  30.                 i2c_write(0x05);
  31.  
  32.                 i2c_start();
  33.                 i2c_write(SLAVE_ADDRESS | 0x01);
  34.  
  35.                 fogadottadat=i2c_read(1);
  36.                 fogadottadat2=i2c_read(0);             
  37.                 i2c_stop();
  38.                 fogadottadat = fogadottadat & 0x01; //Clear flag bits
  39.                 if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
  40.                                                    
  41.                  fogadottadat = fogadottadat & 0x0F; //Clear SIGN
  42.                   Temperature = 256.0 - ((float)(fogadottadat *16 + fogadottadat2) / 16.0);
  43.                 }else //TA >= 0°C
  44.                 Temperature =  fogadottadat * 16 + ((float)fogadottadat2/ 16.0);
  45.                  lcd_putc("\f");
  46.                   sprintf(felsosor,"TEMP: %3.2f     " ,Temperature);
  47.        
  48.                 a=0;                                                                           
  49.                 while(a<=16)                                                   
  50.                         {
  51.                         lcd_putc(felsosor[a]);                         
  52.                         a++;                                                           
  53.                         }


Ez a program tökéletesen fut.
A C32-esben pedig itt tartok.:

  1. int a=0;       
  2.                 unsigned long lofasz=0;
  3.                 unsigned char felsosor[16];            
  4.                 unsigned char alsosor[16];     
  5.                 float Temperature=0;
  6.                 unsigned long fogadottadat=0;
  7.                 unsigned long fogadottadat2=0;
  8.                 unsigned char SlaveAddress = 0x3F;
  9.  
  10. int main()
  11.                 {
  12.                 //SYSTEMConfigPerformance(SYS_FREQ);
  13.                 SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
  14.                  
  15.                 setupLCD();
  16.                 lcd_init();
  17.                  init();
  18.  
  19.                 while(1)
  20.                         {
  21.          
  22.                        StartI2C1();    
  23.                        MasterWriteI2C1( SlaveAddress & 0xFE );
  24.                        MasterWriteI2C1(0x05);
  25.                        StartI2C1();
  26.                        MasterWriteI2C1( SlaveAddress  | 0x01 );
  27.  
  28.                         fogadottadat=MasterReadI2C1();
  29.                         fogadottadat2=MasterReadI2C1();        
  30.                         StopI2C1();
  31.                        fogadottadat = fogadottadat & 0x01; //Clear flag bits
  32.                        if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
  33.                                                    
  34.                  fogadottadat = fogadottadat & 0x0F; //Clear SIGN
  35.                        Temperature = 256.0 - ((float)(fogadottadat *16 + fogadottadat2) / 16.0);
  36.                                                 }else //TA >= 0°C
  37.                        Temperature =  fogadottadat * 16 + ((float)fogadottadat2/ 16.0);
  38.                         putsLCD("\f");
  39.                        sprintf(felsosor,"TEMP: %3.2f     " ,Temperature);
  40.  
  41.                                         a=0;                                                                           
  42.                                 while(a<=16)                                                   
  43.                                                 {
  44.                                                 putsLCD(felsosor[a]);                          
  45.                                                 a++;                                                           
  46.                                                 }


Az elején van gondom , ezzel a két sorral:
fogadottadat=MasterReadI2C1();
fogadottadat2=MasterReadI2C1(); ezek megfelelőek?

Köszönöm a segítséget!!
A hozzászólás módosítva: Máj 21, 2014
(#) KaiserA válasza usane hozzászólására (») Máj 21, 2014 /
 
Köszönöm szépen!
(#) szidom hozzászólása Máj 22, 2014 /
 
Sziasztok!
Megint egy kis segítségre lenne szükségem, még mindig 16f628a-val küzdök.
rs485 kommunikációt szeretnék megoldani, de nem jövök rá miért nem megy. Már egy hete kínlódok de nem megy.
A cél az hogy ha beérkezik egy "A" akkor bekapcsolja a relé1-et és visszaküldi: KapuOk
ha "B" érkezik kikapcsolja a relé1-et, és visszaküldi: KapuNok.............
Addig jó hogy be, ki kapcsol, az adat is megjelenik a pic tx lábán, de az SN75176a valamiért nem küldi át az adatot. Mellékelem a kódot is és a kapcsolási rajzot is hátha segít.
  1. LIST    P=16f628A
  2.         #INCLUDE        "P16F628A.INC"
  3.         __CONFIG _BODEN_OFF&_CP_OFF&_WDT_OFF&_LVP_OFF&_MCLRE_ON&_INTOSC_OSC_NOCLKOUT
  4.         ERRORLEVEL      0,      -302
  5.        
  6.         CBLOCK  0X20
  7.         T1
  8.         T2
  9.         T3
  10.         T11
  11.         T12
  12.         T13
  13.         VETT
  14.         ENDC
  15.        
  16.         ORG 0
  17.         NOP
  18.         GOTO    INIT
  19.  
  20.         ORG     4
  21.         NOP
  22.         GOTO    INIT
  23.  
  24. INIT  
  25.         #DEFINE RELAY1  PORTA,0
  26.         #DEFINE RELAY2  PORTA,1
  27.         #DEFINE RELAY3  PORTA,2
  28.         #DEFINE RELAY4  PORTA,3
  29.         #DEFINE LED             PORTA,6
  30.         #DEFINE BEMENET PORTA,7
  31.         #DEFINE KULD    PORTB,0
  32.  
  33.  
  34.         BANKSEL TRISA
  35.         MOVLW   b'10000000'             ;portA,7 bemenet
  36.         MOVWF   TRISA
  37.  
  38.         BANKSEL PORTA
  39.         CLRF    PORTA
  40.         MOVLW   b'00000111'
  41.         MOVWF   CMCON
  42.         BANKSEL TRISB
  43.         MOVLW   b'00000010'             ;portB,1 bemenet
  44.         MOVWF   TRISB
  45.         BANKSEL PORTB  
  46.  
  47.                
  48.         BANKSEL SPBRG
  49.         MOVLW 0x19           ; 0x0C=19200 baud (0x19=9600 baud)
  50.         MOVWF SPBRG
  51.         MOVLW b'00100100'      
  52.         MOVWF TXSTA              
  53.        
  54.         BANKSEL RCSTA
  55.         MOVLW b'10010000'        
  56.         MOVWF RCSTA
  57.  
  58. START
  59.         CLRF    PORTB
  60.         CALL    RECEIVE
  61.         MOVFW   VETT
  62.         SUBLW   0X41
  63.         BTFSC   STATUS,Z
  64.         GOTO    A1                      ;vett adat: A
  65.         MOVFW   VETT   
  66.         SUBLW   0X42
  67.         BTFSC   STATUS,Z
  68.         GOTO    B1                      ;vett adat: B
  69.         MOVFW   VETT
  70.         SUBLW   0X43
  71.         BTFSC   STATUS,Z
  72.         GOTO    C1                      ;vett adat: C
  73.         MOVFW   VETT
  74.         SUBLW   0X44
  75.         BTFSC   STATUS,Z
  76.         GOTO    D1                      ;vett adat: D
  77.         MOVFW   VETT
  78.         SUBLW   0X45
  79.         BTFSC   STATUS,Z
  80.         GOTO    E1                      ;vett adat: E
  81.         MOVFW   VETT
  82.         SUBLW   0X46
  83.         BTFSC   STATUS,Z
  84.         GOTO    F1                      ;vett adat: F
  85.         MOVFW   VETT
  86.         SUBLW   0X47
  87.         BTFSC   STATUS,Z
  88.         GOTO    G1                      ;vett adat: G
  89.         MOVFW   VETT
  90.         SUBLW   0X48
  91.         BTFSC   STATUS,Z
  92.         GOTO    H1                      ;vett adat: H
  93.         MOVFW   VETT
  94.         SUBLW   0X49
  95.         BTFSC   STATUS,Z
  96.         GOTO    I1                      ;vett adat: I
  97. ;       CALL    DELAY
  98.         GOTO    START
  99.  
  100. RECEIVE
  101.         BTFSS PIR1,RCIF          
  102.         GOTO    RECEIVE
  103.         MOVF RCREG,W
  104.         MOVWF   VETT
  105.         RETURN
  106.  
  107. TRANS
  108.         NOP
  109.         BSF     LED
  110.         BANKSEL TXREG
  111.         MOVWF   TXREG
  112.         BANKSEL TXSTA
  113.          
  114. WTHERE
  115.         BTFSS   TXSTA,TRMT        
  116.         GOTO    WTHERE
  117.         BCF     STATUS,RP0
  118.         BCF     LED        
  119.         RETURN
  120. A1                                              ;relé1 bekapcsolás
  121.         NOP
  122.         BSF     KULD                                   
  123.         CALL    REL1BE
  124.         BCF     KULD
  125.         GOTO    START
  126. B1                                              ;relé1 kikapcsolás
  127.         NOP
  128.         BSF     KULD
  129.         CALL    REL1KI
  130.         BCF     KULD
  131.         GOTO    START
  132. C1                                              ;relé2 bekapcsolás
  133.         NOP
  134.         BSF     KULD
  135.         CALL    REL2BE
  136.         GOTO    START
  137.         BCF     KULD
  138. D1                                              ;relé2 kikapcsolás
  139.         NOP
  140.         BSF     KULD
  141.         CALL    REL2KI
  142.         GOTO    START
  143.         BCF     KULD
  144. E1                                              ;relé3 bekapcsolás
  145.         NOP
  146.         BSF     KULD
  147.         CALL    REL3BE
  148.         GOTO    START
  149.         BCF     KULD
  150. F1                                              ;relé3 kikapcsolás
  151.         NOP
  152.         BSF     KULD
  153.         CALL    REL3KI
  154.         GOTO    START
  155.         BCF     KULD
  156. G1                                              ;relé4 bekapcsolás
  157.         NOP
  158.         BSF     KULD
  159.         CALL    REL4BE
  160.         GOTO    START
  161.         BCF     KULD
  162. H1                                              ;relé4 kikapcsolás
  163.         NOP
  164.         BSF     KULD
  165.         CALL    REL4KI
  166.         GOTO    START
  167.         BCF     KULD
  168. I1                                              ;bemenet lekérdezés
  169.         NOP
  170.         BSF     KULD
  171.         CALL    BEM
  172.         GOTO    START
  173.         BCF     KULD
  174.  
  175. REL1BE
  176.         BSF     RELAY1
  177.         MOVLW   'K'
  178.         CALL    TRANS
  179.         MOVLW   'a'
  180.         CALL    TRANS
  181.         MOVLW   'p'
  182.         CALL    TRANS
  183.         MOVLW   'u'
  184.         CALL    TRANS
  185.         MOVLW   'O'    
  186.         CALL    TRANS
  187.         MOVLW   'k'    
  188.         CALL    TRANS
  189.         MOVLW  0x0D ; CR
  190.         CALL    TRANS
  191.         MOVLW  0x0A ; LF
  192.         CALL    TRANS
  193.         RETURN
  194.  
  195. REL1KI
  196.         BCF     RELAY1
  197.         MOVLW   'K'
  198.         CALL    TRANS
  199.         MOVLW   'a'
  200.         CALL    TRANS
  201.         MOVLW   'p'
  202.         CALL    TRANS
  203.         MOVLW   'u'
  204.         CALL    TRANS
  205.         MOVLW   'N'
  206.         CALL    TRANS
  207.         MOVLW   'O'    
  208.         CALL    TRANS
  209.         MOVLW   'k'    
  210.         CALL    TRANS
  211.         MOVLW  0x0D ; CR
  212.         CALL    TRANS
  213.         MOVLW  0x0A ; LF
  214.         CALL    TRANS
  215.         RETURN
  216.  
  217. REL2BE
  218.         BSF     RELAY2
  219.         MOVLW   'K'
  220.         CALL    TRANS
  221.         MOVLW   'K'
  222.         CALL    TRANS
  223.         MOVLW   'a'
  224.         CALL    TRANS
  225.         MOVLW   'p'
  226.         CALL    TRANS
  227.         MOVLW   'u'
  228.         CALL    TRANS
  229.         MOVLW   'O'    
  230.         CALL    TRANS
  231.         MOVLW   'k'    
  232.         CALL    TRANS
  233.         MOVLW  0x0D ; CR
  234.         CALL    TRANS
  235.         MOVLW  0x0A ; LF
  236.         CALL    TRANS
  237.         RETURN
  238.  
  239. REL2KI
  240.         BCF     RELAY2
  241.         MOVLW   'K'
  242.         CALL    TRANS
  243.         MOVLW   'K'
  244.         CALL    TRANS
  245.         MOVLW   'a'
  246.         CALL    TRANS
  247.         MOVLW   'p'
  248.         CALL    TRANS
  249.         MOVLW   'u'
  250.         CALL    TRANS
  251.         MOVLW   'N'
  252.         CALL    TRANS
  253.         MOVLW   'O'    
  254.         CALL    TRANS
  255.         MOVLW   'k'    
  256.         CALL    TRANS
  257.         MOVLW  0x0D ; CR
  258.         CALL    TRANS
  259.         MOVLW  0x0A ; LF
  260.         CALL    TRANS
  261.         RETURN
  262.  
  263. REL3BE
  264.         BSF     RELAY3
  265.         MOVLW   'S'
  266.         CALL    TRANS
  267.         MOVLW   't'
  268.         CALL    TRANS
  269.         MOVLW   'o'
  270.         CALL    TRANS
  271.         MOVLW   'p'
  272.         CALL    TRANS
  273.         MOVLW   'O'    
  274.         CALL    TRANS
  275.         MOVLW   'k'    
  276.         CALL    TRANS
  277.         MOVLW  0x0D ; CR
  278.         CALL    TRANS
  279.         MOVLW  0x0A ; LF
  280.         CALL    TRANS
  281.         RETURN
  282.  
  283. REL3KI
  284.         BCF     RELAY3
  285.         MOVLW   'S'
  286.         CALL    TRANS
  287.         MOVLW   't'
  288.         CALL    TRANS
  289.         MOVLW   'o'
  290.         CALL    TRANS
  291.         MOVLW   'p'
  292.         CALL    TRANS
  293.         MOVLW   'N'
  294.         CALL    TRANS
  295.         MOVLW   'O'    
  296.         CALL    TRANS
  297.         MOVLW   'k'    
  298.         CALL    TRANS
  299.         MOVLW  0x0D ; CR
  300.         CALL    TRANS
  301.         MOVLW  0x0A ; LF
  302.         CALL    TRANS
  303.         RETURN
  304.  
  305.         BSF     RELAY4
  306.         MOVLW   'L'
  307.         CALL    TRANS
  308.         MOVLW   'á'
  309.         CALL    TRANS
  310.         MOVLW   'm'
  311.         CALL    TRANS
  312.         MOVLW   'p'
  313.         CALL    TRANS
  314.         MOVLW   'a'
  315.         CALL    TRANS
  316.         MOVLW   'O'    
  317.         CALL    TRANS
  318.         MOVLW   'k'    
  319.         CALL    TRANS
  320.         MOVLW  0x0D ; CR
  321.         CALL    TRANS
  322.         MOVLW  0x0A ; LF
  323.         CALL    TRANS
  324.         RETURN
  325.  
  326.         BCF     RELAY4
  327.         MOVLW   'L'
  328.         CALL    TRANS
  329.         MOVLW   'á'
  330.         CALL    TRANS
  331.         MOVLW   'm'
  332.         CALL    TRANS
  333.         MOVLW   'p'
  334.         CALL    TRANS
  335.         MOVLW   'a'
  336.         CALL    TRANS
  337.         MOVLW   'N'
  338.         CALL    TRANS
  339.         MOVLW   'O'    
  340.         CALL    TRANS
  341.         MOVLW   'k'    
  342.         CALL    TRANS
  343.         MOVLW  0x0D ; CR
  344.         CALL    TRANS
  345.         MOVLW  0x0A ; LF
  346.         CALL    TRANS
  347.         RETURN
  348.  
  349. BEM
  350.         BTFSS   PORTA,7
  351.         GOTO    NYIT
  352.         GOTO    CSUK
  353.         RETURN
  354.  
  355. NYIT
  356.         MOVLW   'N'
  357.         CALL    TRANS
  358.         MOVLW   'y'
  359.         CALL    TRANS
  360.         MOVLW   'i'
  361.         CALL    TRANS
  362.         MOVLW   't'
  363.         CALL    TRANS
  364.         MOVLW   'v'
  365.         CALL    TRANS
  366.         MOVLW   'a'
  367.         CALL    TRANS
  368.         MOVLW  0x0D ; CR
  369.         CALL    TRANS
  370.         MOVLW  0x0A ; LF
  371.         CALL    TRANS
  372.         GOTO    START
  373.  
  374. CSUK
  375.         MOVLW   'C'
  376.         CALL    TRANS
  377.         MOVLW   's'
  378.         CALL    TRANS
  379.         MOVLW   'u'
  380.         CALL    TRANS
  381.         MOVLW   'k'
  382.         CALL    TRANS
  383.         MOVLW   'v'
  384.         CALL    TRANS
  385.         MOVLW   'a'
  386.         CALL    TRANS
  387.         MOVLW  0x0D ; CR
  388.         CALL    TRANS
  389.         MOVLW  0x0A ; LF
  390.         CALL    TRANS
  391.         GOTO    START
  392.                
  393. DELAY                                                                  
  394.         MOVLW   D'250'
  395.         MOVWF   T1
  396. DEL
  397.         MOVLW   D'150'
  398.         MOVWF   T2
  399. DEL1
  400.         MOVLW   D'50'
  401.         MOVWF   T3             
  402. DEL2
  403.         DECFSZ  T3,F
  404.         GOTO    DEL2
  405.         DECFSZ  T2,F
  406.         GOTO    DEL1
  407.         DECFSZ  T1,F
  408.         GOTO    DEL
  409.         RETURN
  410.        
  411. DELAY1                                                                 
  412.         MOVLW   D'15'
  413.         MOVWF   T11
  414. DEL5
  415.         MOVLW   D'15'
  416.         MOVWF   T12
  417. DEL6
  418.         MOVLW   D'15'
  419.         MOVWF   T13            
  420. DEL7
  421.         DECFSZ  T13,F
  422.         GOTO    DEL7
  423.         DECFSZ  T12,F
  424.         GOTO    DEL6
  425.         DECFSZ  T11,F
  426.         GOTO    DEL5
  427.         RETURN
  428.         END

kapcs.png
    
(#) diamik hozzászólása Máj 22, 2014 /
 
Sziasztok!

C-ben tanulgatom a PIC programozást. Egy olyan kérdésem lenne, hogy a "?" -kérdőjel- operátor mire használatos programozás során?
(#) kissi válasza diamik hozzászólására (») Máj 22, 2014 / 1
 
Ez egy feltételes operátor, egyszerűbben írható, mint az if else szerkezet

Formája: feltétel ? igaz_kif : hamis_kif
Ha igaz a feltétel, igaz_kif, amúgy hamis_kif hajtódik végre

pl.
  1. a>b? c=5: c=3; // ha 'a' nagyobb, mint 'b', akkor 'c' értéke 5 lesz, ellenkező esetben 3.
A hozzászólás módosítva: Máj 22, 2014
(#) diamik válasza kissi hozzászólására (») Máj 22, 2014 /
 
Köszönöm szépen!
(#) vassen hozzászólása Máj 23, 2014 /
 
Sziasztok.
Most fogtam neki PIC-el foglalkozni s egy belso RTCC modult szeretnek elinditani egy PIC18F25J11-en.
Barmit probalok beirni mindig ugyanazt olvasom ki a masodperc regiszerbol (72). Forditashoz mikroC-t hasznaltam. Orajel forrasnak kulso kvarc oszcillator van (32.768kHz) es ket 12pF-os kondi fold fele. A soros kommunikacio le volt tesztelve es az mukodik rendesen.
Csatolom az inicializalas kodot.
  1. void init_rtc(void)
  2. {
  3.  RTCCFG = 0x00;
  4.  RTCCFG.RTCWREN = 1;
  5.  RTCCFG.RTCEN = 1; //enable RTC
  6.  RTCCFG.RTCOE = 1; //RTCC Output Enable bit
  7. // CONFIG3L.RTCOSC = 1; //T1OSC as reference clock p.395 [set from project settings]
  8.  T1CON.TMR1CS1 = 1; //Timer1 T1OSC clock source
  9.  T1CON.T1OSCEN = 1; //enable timer1
  10.   RTCVALL = 0x00;
  11. }


Itt probalom kiolvasni az erteket es kuldeni soros porton:
  1. RTCCFG.RTCPTR1 = 0;
  2. RTCCFG.RTCPTR0 = 0;
  3. UART1_Write(RTCVALL);

Valakinek van otlete, hogy miert nem akar mukodni?
A hozzászólás módosítva: Máj 23, 2014
(#) don_peter hozzászólása Máj 23, 2014 /
 
Srácok készítek egy P18F452-es teszt nyákot.
Szeretném, ha leellenőriznétek a főbb áram, kvarc, szűrőkondik...stb kötéseimet, hogy azokat biztosan jó helyre és jól kötök.
A kvarc még nincs eldöntve, de szerintem a legnagyobb fog rákerülni amit csak említ a manuál az pedig ha jól emlékszem 16MHz. (bár ebben nem vagyok biztos)

Egyúttal szeretném megkérdezni, hogy mi alapján tudom megítélni, hogy mekkora kvarc-ra lesz majd szükségem?
Természetesen olyan esetre gondolok ahol más egyéb periféria nem köti ki annak minimális tartományát.
Illetve az is érdekelne, hogyan tudom kiszámolni mikor és milyen kvarcot kell alkalmaznom.
Utóbbi zavaros még.

Huuppsz lemaradtak a képek.
Előre is köszi...
A hozzászólás módosítva: Máj 23, 2014
(#) nedudgi válasza don_peter hozzászólására (») Máj 23, 2014 /
 
Kvarcra akkor van szükség, ha valami miatt nagypontosságú órajel kell, esetleg a kívánt frekvencia nem állítható elő a belső oszcillátorral. Ritka eset.
A nyáktervet nem néztem át.
A hozzászólás módosítva: Máj 23, 2014
(#) Hp41C válasza don_peter hozzászólására (») Máj 23, 2014 /
 
Szerintem nem jó az ICSP csatlakozó MCLR pontjának bekötése. Nem kell a csatlakozó és a láb közé ellenállás. Az ellenállást inkább a MCLR láb és a Vdd közé tedd.
(#) don_peter válasza Hp41C hozzászólására (») Máj 23, 2014 /
 
Ez a 10K-os ellenállás az ICSP programozót védi elvileg? (vagy mire szolgál pontosan?)
A P18F4550-ennél is használtam és gondoltam ide sem árt ha ott van.
Ezt most rögtön javítom is.
(#) usane válasza don_peter hozzászólására (») Máj 23, 2014 /
 
Ahogy Hp41C fórumtárs is írta a 10k a MCLR és VDD láb közé kell, és az a célja, hogy az MCLR lábat felhúzza tápra, így megakadályozva, hogy az MCLR láb ne lebegjen és ne resetelje a PIC-et. Fenn a sárga sávban a 3. sor.
A hozzászólás módosítva: Máj 23, 2014
(#) don_peter válasza usane hozzászólására (») Máj 23, 2014 /
 
Igen azt azonnal módosítottam.
Köszi.
Más hibát nem vétettem így elsőre?
A hozzászólás módosítva: Máj 23, 2014
Következő: »»   527 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.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