Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1136 / 1320
(#) ktamas66 válasza Wudoou hozzászólására (») Szept 18, 2013 /
 
Bekapcsolás után vársz elég ideig, hogy az LDC-n is beálljanak a tápfeszek? Lehet a pic gyorsabban indul.
(#) potyo válasza Wudoou hozzászólására (») Szept 18, 2013 /
 
Az előbb linkelt adatlap 44-es oldalán a 15ms várakozást követően mit mutat, mit kell az LCD lábaira írni? És ehhez képest te mit írsz?
(#) pepe1125 hozzászólása Szept 19, 2013 /
 
Sziasztok. Építettem egy teljesítménymérő kis műszert PIC18F252-vel (vagy PIC18F2620-al).
A programot megmutatom, mit sikerült összehozni. Viszont a kérdésem az lenne, hogyan lehet megvalósítani úgy, hogy ha elértem a 800W határt akkor kezdjen el villogni a kijelző oly módon, hogy ne lassítsa le a delay rutin az AD konverter olvasását és a kijelző frissítést?!

  1. // Lcd beállítása
  2.  
  3. sbit LCD_RS at LATC7_bit;
  4. sbit LCD_RW at LATC6_bit;
  5. sbit LCD_EN at LATC5_bit;
  6. sbit LCD_D4 at LATB4_bit;
  7. sbit LCD_D5 at LATB5_bit;
  8. sbit LCD_D6 at LATB6_bit;
  9. sbit LCD_D7 at LATB7_bit;
  10.  
  11. sbit LCD_RS_Direction at TRISC7_bit;
  12. sbit LCD_EN_Direction at TRISC5_bit;
  13. sbit LCD_RW_Direction at TRISC6_bit;
  14. sbit LCD_D4_Direction at TRISB4_bit;
  15. sbit LCD_D5_Direction at TRISB5_bit;
  16. sbit LCD_D6_Direction at TRISB6_bit;
  17. sbit LCD_D7_Direction at TRISB7_bit;
  18.  
  19. sbit LCD_BCK at LATB3_bit;
  20. sbit LCD_BCK_Direction at TRISB3_bit;
  21.  
  22. // Lcd beéllítás vége
  23.  
  24.  
  25. unsigned long int ADC_Value1, ADC_Value2, Voltage, Ampere, POWER;
  26.  
  27. char *display_v1 = "U=00.0V";
  28. char *display_v2 = "I=00.0A";
  29. char *display_v3 = "POWER  =>   000W";
  30.                
  31. char txt2[] = " SP LCD POWER ";
  32. char txt3[] = "ver 1.1";
  33.  
  34. void main() {
  35.  
  36.      ADC_init();
  37.  
  38.      TRISA = 0b00001011;
  39.      TRISB = 0b00000000;
  40.      TRISC = 0b00000000;
  41.  
  42.     // ADCON1=0x05;   //Külső referencia (Vref+) ha szükséges
  43.  
  44.      LCD_RW_Direction = 0;
  45.      LCD_RW = 0;
  46.  
  47.      delay_ms(500);
  48.        
  49.      Lcd_Init();        
  50.      Lcd_Cmd(_LCD_CLEAR);            
  51.      Lcd_Cmd(_LCD_CURSOR_OFF);      
  52.  
  53.      LCD_BCK_Direction = 0;
  54.      LCD_BCK = 1; //LCD háttérvilágítás bekapcsolása...
  55.  
  56.   Lcd_Out(1,2,txt2);             //DEMO szöveg kiiratása    
  57.   Lcd_Out(2,5,txt3);             //DEMO szöveg kiiratása
  58.              
  59.   Delay_ms(3000);
  60.  
  61.   Lcd_Cmd(_LCD_CLEAR);          
  62.  
  63.  
  64. do {
  65.  
  66.  
  67.    ADC_Value1 = ADC_Read(0);        
  68.    Voltage = (5000 * ADC_Value1 / 1023) * 10;    //AD értékének Feszültséggé alakítása
  69.    
  70.    ADC_Value2 = ADC_Read(1);        
  71.    Ampere = (5000 * ADC_Value2 / 1023) * 4;    //AD értékének Árammá alakítása
  72.    
  73.    POWER = (Voltage * Ampere) / 1000000;      //Teljesítmény számítás
  74.  
  75.  
  76.    display_v1[2] = Voltage /10000 +48 ;
  77.    display_v1[3] = (Voltage /1000)%10 +48;
  78.    display_v1[5] = (Voltage /100)%10 +48;
  79.  
  80.    Lcd_Out(1,1,display_v1);
  81.    
  82.    display_v2[2] = Ampere /10000 +48 ;
  83.    display_v2[3] = (Ampere /1000)%10 +48;
  84.    display_v2[5] = (Ampere /100)%10 +48;
  85.  
  86.    Lcd_Out(1,10,display_v2);
  87.  
  88.    //display_v3[11] = POWER /1000 +48 ; //Ha szükséges 4 számjegyű kijelzés 1000W felett...
  89.    display_v3[12] = (POWER /100)%10 +48;
  90.    display_v3[13] = (POWER /10)%10 +48;
  91.    display_v3[14] = (POWER /1)%10 +48;
  92.    Lcd_Out(2,1,display_v3);
  93.  
  94.    delay_ms(50);
  95.  
  96.    
  97.    if (POWER >= 800){    //LCD megvillogtatása 800W felett
  98.    LCD_BCK = 0;
  99.    delay_ms(500);
  100.    LCD_BCK = 1;
  101.    delay_ms(500);
  102.    }
  103.    else{}
  104.  
  105.   } while(1);
  106.  
  107. }
(#) potyo válasza pepe1125 hozzászólására (») Szept 19, 2013 /
 
Annyiszor elmondtuk már a különféle pices témákban, hogy delay-t nem szabad időzítésre használni. Így tehát a válasz az, hogy rosszul van a programod tervezve, át kell tervezned olyanra, hogy ne használjon delayt, főleg nem ilyen hosszú idejűeket. Iránymutatás pl. itt: Link
(#) pepe1125 hozzászólása Szept 19, 2013 /
 
Az a baj, hogy nem ismerem még az időzítőket, és megszakításvezérlőket... Köszönöm a választ, delay elfelejtve Ma is Tanultam valamit.
(#) potyo válasza pepe1125 hozzászólására (») Szept 19, 2013 /
 
Akkor itt az alkalom, hogy megismerkedj velük
(#) Wudoou válasza potyo hozzászólására (») Szept 19, 2013 /
 
A power-on után min. 15ms-t kell várni az adatlap szerint. Én várok 16ms-ot.
Utána az lcd felső 4 lábára 0011-et kell írni.
De mivel nekem a lábkiosztások fordítva vannak, vagyis:
PIC RB7->LCD4
PIC RB6->LCD5
PIC RB5->LCD6
PIC RB4->LCD7
Ezért hogy kimenjen a 0011, 1100-t kell írni, vagyis 0x0c.
Egyéb ötlet?
(#) ktamas66 válasza Wudoou hozzászólására (») Szept 19, 2013 /
 
A 15ms-ot azután kell várni, hogy a tápfesz meghaladja 4,5V-ot, a PIC már 2V-tól működik.
Nyugodtan rakjál be 0,5-1s várakozást, vagy addig csinálj mást (csak tesztnek próbáld ki).
(#) potyo válasza Wudoou hozzászólására (») Szept 19, 2013 /
 
Na hát ezt eddig nem írtad, hogy fordítva vannak a lábak...

Viszont ahogy nézem most tovább a kódot, hiányzik az, hogy még úgy veszed, hogy 8 bites üzemben van, és küldöd neki a parancsot, hogy váltson át négy bitesre. Tehát kellene még egy
  1. lcd_data=0x04;
  2. lcd_enable();

Meg némi várakozás még elé, azt nézd meg az adatlapból, hogy mennyi.
(#) Wudoou válasza ktamas66 hozzászólására (») Szept 19, 2013 /
 
  1. __CONFIG(FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_ON & CPD_OFF & CP_OFF & BOREN_ON & IESO_ON & FCMEN_ON & LVP_OFF & BOR4V_BOR40V);

A config bitekben ott a bor.
Elvileg 4v-ra konfigurálva.
(#) Wudoou válasza potyo hozzászólására (») Szept 19, 2013 /
 
Bocsánat, azt hittem az lcd_init-ből kiderül.
Ott meg kell cserélgetni a biteket.
Akkor ezek szerint még egyszer ki kell küldenem egy 0x0c-t?
(#) potyo válasza Wudoou hozzászólására (») Szept 19, 2013 / 1
 
Nem 0x0C-t, hanem esetedben 0x04-et. Nézd meg a tegnap linkelt adatlap 46. oldalán a folyamatábrát és a hozzá tartozó magyarázatot. Kicsit el vannak csúszva magasságban egymástól, de ha alulról számolod, akkor összerakható, hogy mi mihez tartozik.
(#) Wudoou válasza potyo hozzászólására (») Szept 19, 2013 /
 
Igen, igazad lehet. Amint tudom, kipróbálom és jelzek. Egyenlőre köszönöm!
(#) szdani hozzászólása Szept 23, 2013 /
 
Tud abban valaki segíteni hogy miért áll meg a 16f1937-em amikor uart-on adatot küldök be neki?
(#) Hp41C válasza szdani hozzászólására (») Szept 23, 2013 / 1
 
Nem áll az meg, csak a megszakítási rutint hajtja vége ismételten, mivel az nem törli a kiváltó okot. Meg kell állapítani, hogy a vétel hibás-e, ha hibás el kell tiltani a vevőt, ki kell olvasni a vételi regisztert és újra kell engedélyezni a vevőt.
(#) szdani válasza Hp41C hozzászólására (») Szept 23, 2013 /
 
Értem, köszönöm.
(#) bbalazs_ hozzászólása Szept 24, 2013 /
 
Urak, segitseget kernek.
USB-s Keyboardot szeretnek kesziteni, pontosabban par billentyut elkuldo eszkozt PIC-bol.
18F25k50-essel dolgozom, igy nem kell kulso kristaly az USB-hez. USB powered az eszkoz.

Egy USB-s Joysticket mar keszitettem vele, igy ertetlenul allok, hogy keyboardot nem sikerul (allitolag a joy a kiindulasi alapja).
HID eszkozkent felismeri az eszkozkezelo hardver reszeben, de nem kuld semmit. Ha egy rendes USB billentyuzetet csatlakoztatok, azt felismeri USB-s billentyuzetnek.
A neten kutakodtam mar, mintapeldakat probaltam atalakitani, nem jott ossze.
Igy ket nap utan hozzatok fordulok:

Egy nagyon egyszeru peldaprogit szeretnek kerni, ami mondjuk egy A-betut elkuld billentyukent mukodve. Minel egyszerubb legyen, mert erteni is szeretnem, nem csak modulokat pakolni egymas melle.
En ugyan assemblyben dolgozom, de johet C-s forras is. XP a rendszerem.
Annyit kerek, hogy netes cimeket ne ajanlgassatok, mert az osszeset felkutattam mar.
Elore is koszonom.
(#) usane hozzászólása Szept 25, 2013 /
 
Az mplab X nálatok sem olyan kényes mint a nagy testvére?
Az X-el simán felprogramoztam ICSP-n azt a 16F628A-t amire az mplab 8.92 "Target device doesnt match" errort dobott.
(#) kissi válasza usane hozzászólására (») Szept 25, 2013 /
 
Ott valami más volt a hiba oka, a céleszközt a programozó "deríti fel" !
(#) usane válasza kissi hozzászólására (») Szept 25, 2013 /
 
Hát ez az.
Holnap letesztelem még egyszer mindkettővel.
(#) usane hozzászólása Szept 25, 2013 /
 
Hello!
Van egy darabka műgyanta lapom rajta rézcsíkokkal, meg alkatrészekkel (PCB).
2 Pic van rajta elhelyezve. Egy 16f628a, és egy 16f690.
Az előbbi külső 4MHz kvarccal, fel is programoztam ICSP-n. Megy frankón.
A 690-es belső oszival 8MHz-re állítva. Felprogramozás ok, de ha bekapcsolom a ketyerét akkor nem megy. Ugyanazon tápról mennek. Kérdés, hogy zavarhatja-e a másik PIC ami miatt folyton resetelődik, ez esetben mi segíthetne rajta? Ha nem ez, akkor vagy kinyírtam, vagy valami konfig hiba lehet még, mert a program szimuátoron megy frankón.
A hozzászólás módosítva: Szept 25, 2013
(#) usane válasza usane hozzászólására (») Szept 25, 2013 /
 
Itt a konfig rész.
  1. #include <xc.h>
  2. #include <pic16f690.h>
  3.  
  4. #define in1  PORTBbits.RB6
  5. #define in2  PORTBbits.RB5
  6. #define in3  PORTBbits.RB4
  7. #define in4  PORTCbits.RC2
  8. #define in5  PORTCbits.RC1
  9. #define in6  PORTCbits.RC0
  10. #define in7  PORTAbits.RA2
  11. #define in8  PORTAbits.RA1
  12.  
  13. #define out1 PORTBbits.RB7
  14. #define out2 PORTCbits.RC7
  15. #define out3 PORTCbits.RC6
  16. #define out4 PORTCbits.RC3
  17. #define out5 PORTCbits.RC4
  18. #define out6 PORTCbits.RC5
  19. #define out7 PORTAbits.RA4
  20. #define out8 PORTAbits.RA5
  21.  
  22. // CONFIG
  23. #pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
  24. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
  25. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  26. #pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
  27. #pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
  28. #pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
  29. #pragma config BOREN = ON       // Brown-out Reset Selection bits (BOR enabled)
  30. #pragma config IESO = OFF        // Internal External Switchover bit (Internal External Switchover mode is disabled)
  31. #pragma config FCMEN = OFF       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
  32.  
  33. void main(void)
  34. {
  35.     OSCCON=0b1100000;
  36.     ANSEL=0;
  37.     ANSELH=0;
A hozzászólás módosítva: Szept 25, 2013
(#) usane válasza usane hozzászólására (») Szept 25, 2013 /
 

SCS bit.
Holnap Letesztelem.
A hozzászólás módosítva: Szept 25, 2013
(#) valaki2 hozzászólása Szept 26, 2013 /
 
Sziasztok,

az érdekelne, hogy általánosságban, processzortól függetlenül az UART modulnál a baud rate generáláshoz csak az adatbitek vannak figyelembe véve vagy a keretbitek (start, stop) is? Tehát a kiszámított érték az 8 vagy 10 bitre vonatkozik.
(#) potyo válasza valaki2 hozzászólására (») Szept 26, 2013 /
 
A kiszámított érték EGY bitre vonatkozik. 19200bps sebességnél egy bit (beleértve a start és stop bitet is) szélessége 1/19200=5,2us
(#) valaki2 válasza potyo hozzászólására (») Szept 27, 2013 /
 
Ok. Koszonom szepen.
Tehat a 8 adatbithez es 1 start- ill. 1 stop bithez tartozo ertek nem ugyan olyan atviteli sebesseget fog eredmenyezni mint ha 9 adat bites modot valasztok 1 start- illetve 1 stop bittel?
(#) nedudgi válasza valaki2 hozzászólására (») Szept 27, 2013 /
 
Az keretbitek számának változtatása a tényleges adatforgalom, az egy másodperc alatt átvitt bájtok számát csökkenti. Egy bit ideje ugyan változatlan, de egy bájthoz több idő (adatbit) tartozik.
Az adatátviteli sebességet egy bit ideje alapján nevezzük el, nem az átvitt adatmennyiség alapján.
A hozzászólás módosítva: Szept 27, 2013
(#) valaki2 válasza nedudgi hozzászólására (») Szept 27, 2013 /
 
Ok. Nekem azt kene kideritenem, hogy 833,3uS alatt attudok e kuldeni 8 adatbitet 9600 bits/s mellett.
Keret: 1 start bit + 8 adatbit + 1 stop bit = 10 bit.

Tehat 1s alatt 9600 bitet lehet atvinni. Nekem 833,3us kell ami 9600*833,3us = 7,99 bit.

Vagyis nem viheto at.

Helyes a gondolatmentem?
(#) potyo válasza valaki2 hozzászólására (») Szept 27, 2013 /
 
Nem teljesen értem a gondolatmenetedet. Honnan jön a 833,3us idő? Mert ez pontosan annyi idő, ami alatt a 8 adatbit átmegy. De jelen esetben egy teljes bájt átvitele, mivel van start és stop bit is, 25%-al több időt igényel, tehát 1041,67us-ot.

19200bps-t nem lehet használni?
(#) valaki2 hozzászólása Szept 27, 2013 /
 
1/1200. Adott egy jel, aminek ennyi a preiodusideje.
Következő: »»   1136 / 1320
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