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   546 / 1210
(#) don_peter válasza Hp41C hozzászólására (») Júl 13, 2014 /
 
Ezt mire érted?
Így elsőre tök jónak gondolom a megoldásom, de ettől még lehet géz

Más:
Uraim olyan kérdésem lenne, hogy van egy rohadt nagy tömböm ami így néz ki:
  1. //A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - : .
  2. static unsigned char ABC[40][7] ={{0b00000,//A
  3.     0b01110,
  4.     0b10001,
  5.     0b10001,
  6.     0b11111,
  7.     0b10001,
  8.     0b10001},
  9.     {0b00000,//B
  10.         0b11110,
  11.         0b10001,
  12.         0b11110,
  13.         0b10001,
  14.         0b10001,
  15.         0b11110}, ...};

P18F684-es chip-el dolgozom aminek csak 128byte adatmemóriája van.
A kérdésem az lenne, hogy van e mód egy 280byte-os területű tömb használatára?
Vagy, ha ennek esélye nem sok, milyen módon tudnám kikerülni, hogy ne foglaljon le ekkora területet?
Vagy egy hatékonyabb megoldás elmélete is érdekelhet.
WandClock órám programján dolgozom amelyhez egy rugalmasabb alapot akarok készíteni.
Előre is köszi...

ui: most egy switch() elágazással oldottam meg, de ez véleményem szerint nem hatékony megoldás.
(#) zenetom válasza don_peter hozzászólására (») Júl 13, 2014 /
 
Szia!
Egyszerű. Tedd a programmemóriába.
Ahhoz pedig elég 3 betű: ROM. Ezt írd a deklarációnál pl. a "static" mellé. Ezután a programmemóriába fordítja a konstansokat. Ha jól emlékszem legalábbis...
(#) don_peter válasza zenetom hozzászólására (») Júl 13, 2014 /
 
  1. main.c; 37.12 missing basic type; int assumed
  2. Error   [314]  main.c; 37.12 ";" expected

Hibát dob nekem rá sajnos.

Így írtam be:
  1. static ram unsigned char ABC[40][7] ={{0b00000,//A...stb
(#) zenetom válasza don_peter hozzászólására (») Júl 13, 2014 / 1
 
Milyen környezetben is írtad?
Mi a fordító tipusa?
Egyébként nem ram, rom.
De lehet elírtam. Sőt. Biztos, bocsánat.
A romot felejsd el. A static elé írd hogy "const".
A hozzászólás módosítva: Júl 13, 2014
(#) don_peter válasza zenetom hozzászólására (») Júl 13, 2014 /
 
Ohh, bocs az tényleg lemaradt. MPLAB és próbáltam rom-ot is és ugyan úgy hiba jön.

Így is próbáltam:
  1. const rom unsigned char ABC[40][7]
  2. static rom unsigned char ABC[40][7]


"static const rom unsigned char ... "
Ugyan az a hiba
MPLAB Hi-Tech 10-12-16 a fordító..

Köszönöm jó irányba mutattál ezer hálám
A jó megoldás:
  1. static const unsigned char
A hozzászólás módosítva: Júl 13, 2014
(#) zenetom válasza don_peter hozzászólására (») Júl 13, 2014 / 1
 
Na, csak hogy össze legyél zavarodva, így a helyes:
static const rom unsigned char ...
Bár ez lehet hogy a Te fordítódnál nem lesz jó.
A hozzászólás módosítva: Júl 13, 2014
(#) zenetom válasza don_peter hozzászólására (») Júl 13, 2014 /
 
Na a végén csak sikerült megoldani.
(#) Amjad hozzászólása Júl 14, 2014 /
 
Sziasztok.
Meg tudná mondani valaki, mit felejtek ki? 12f683 ADC-t próbálnám, de vagy gyújtás nincs, vagy benzin, mert nem indul. Köszönöm előre is.
  1. int adc=0;
  2.  
  3.     TRISIO=0;
  4.     TRISIObits.TRISIO4=1;
  5.     ANSELbits.ANS3=1;
  6.     ADCON0bits.ADFM=1;
  7.     ADCON0bits.VCFG=0;
  8.     ANSELbits.ADCS0=1;
  9.     ANSELbits.ADCS1=0;
  10.     ANSELbits.ADCS2=1;
  11.  
  12.     while(1)
  13.  
  14.     {
  15.         ADCON0bits.ADON=1;
  16.         _delay(10000);
  17.  
  18.         ADCON0bits.GO=1;
  19.         while(ADCON0bits.GO==1){};
  20.  
  21.         adc=(ADRESH<<8)+ADRESL;
  22.  
  23.         if (adc>512)
  24.             GPIObits.GP2=1;
  25.         else
  26.             GPIObits.GP2=0;
  27.        
  28.     }
(#) Amjad válasza Amjad hozzászólására (») Júl 14, 2014 /
 
Bocs, megtaláltam.
ADCON0/Analog Channel Select bits maradt ki.
A hozzászólás módosítva: Júl 14, 2014
(#) Hp41C válasza don_peter hozzászólására (») Júl 14, 2014 /
 
Ugyan azt csinálja (,ha el nem írtam valamit)... De érdemes megnézni a fordított kód hosszát és hatékonyságát. A PIC16F -eken nincs több bites léptetés, így a (bitek>>i) önmagában egy ciklus. Visszafelé:
  1. char i;
  2.             char bitek = 0b00011000;
  3.             i=8;
  4.             do
  5.             {
  6.                 if (bitek & 0x80)
  7.                 {
  8.                     printf("egyes\n"); // ide jöhet a portra írás
  9.                 }else
  10.                 {
  11.                     printf("nulla\n");
  12.                 }
  13.                 bitek <<= 1;
  14.             } while (--i);
A hozzászólás módosítva: Júl 14, 2014
(#) don_peter válasza Hp41C hozzászólására (») Júl 14, 2014 /
 
Köszi ezt majd kicsit átnyálazom..
(#) Baxi hozzászólása Júl 15, 2014 /
 
Hi Mesterek!
Az lenne a kérdésem hogy 16F690-nél az AD már 1,2V-nál túlcsordul, ez normális? Ugyanaz ha belső illetve külső vref-et használok.
Úgy használom hogy a AD-nak az értékét rakom a pwm-be, feszosztóval megoldottam a hibát, de azért "idegesít" dolog. Valószínű a prg hiba?
Debugolni nem tudom mert kifagy mihelyst "online-ba" akarok menni a pk2-vel .
(#) Pali79 válasza Baxi hozzászólására (») Júl 15, 2014 /
 
Majdnem biztos, hogy hiba van a programban, de látni kellene.
(#) Baxi válasza Pali79 hozzászólására (») Júl 15, 2014 /
 
Ez lenne az:
  1. list     p=16f690
  2.         #include p16f690.inc
  3.  
  4. CBLOCK 0x40
  5. EREDMENYH,EREDMENYL
  6. ENDC
  7.  
  8. ORG 3
  9. ;=============================PORT BEALLITAS=============================
  10.  
  11. BCF STATUS,RP0
  12. BSF STATUS,RP1  ;Bank 2
  13. MOVLW   00000001B
  14. MOVWF   ANSEL   ;SET digital I/O; RA0=ANS0=IN
  15.  
  16. BSF STATUS,RP0
  17. BCF STATUS,RP1 ;BANK1
  18. MOVLW 00000001B
  19. MOVWF TRISA
  20. CLRF TRISC ;Init PORTC=OUT
  21.  
  22. BCF STATUS,RP0
  23. BCF STATUS,RP1; BANK0
  24. CLRF PORTC ;and set 0 RC<0:7>
  25. MOVLW   00000001B
  26. MOVFW   PORTA; PORTA TÖRLÉSE
  27.  
  28. BSF STATUS,RP0
  29. BCF STATUS,RP1 ;BANK1
  30. MOVLW 00000000B ;A/D RC clock
  31. MOVWF ADCON1 ;
  32.  
  33. BCF STATUS,RP0
  34. BCF STATUS,RP1; BANK0
  35. MOVLW 10000001B ;Right, Vdd Vref, AN0
  36. MOVWF ADCON0
  37. ;============================PWM BEÁLLÍTÁS==============================
  38. CLRF CCP1CON    ; CCP Module is off
  39. CLRF TMR2               ; Clear Timer2
  40. MOVLW 11111111B ; BIT=3:0/XXX
  41. MOVWF PR2               ;7:OSFIF=OSC FAIL;C2IF=C2 INT FALAG;C1IF=C1 INT FLAG;EEIF;EE WRITE COMLITE FALG
  42. CLRF INTCON     ; Disable interrupts and clear T0IF
  43. CLRF PIE1               ; Disable peripheral interrupts;BT1=TMR2IE: TMR2=PR2 MEGEGYEZIK, FLAG,BIT
  44. BCF STATUS,RP0
  45. BCF STATUS,RP1; BANK0
  46. CLRF PIR1               ; Clear peripheral interrupts Flags
  47. MOVLW 01001100B ; bit:<7:6>=P1D=RC2,<5:4>: 2LSbs of Duty cycle = 10bit, BIT:<4:0>=PWM MOD BEÁLLÍTÁSA, DUAL, QUAD STB
  48. MOVWF CCP1CON
  49. MOVLW 00000000B ; <0:1>00=4Khz;01=1khz;10=250Hz;11=120Hz
  50. MOVWF T2CON             ; TMR2 BEALLITÁSA
  51. BSF PIE1,TMR2IE
  52. BSF T2CON,TMR2ON ; Timer2 starts to increment
  53. ;============================================PROGRAM=====================================================
  54.  
  55. AD:
  56. BCF STATUS,RP0
  57. BCF STATUS,RP1; BANK0
  58. BSF ADCON0,GO ;Start conversion
  59. BTFSC ADCON0,GO ;Is conversion done?
  60. GOTO $-1 ;No, test again
  61. MOVF ADRESH,W ;Read upper 2 bits
  62. MOVWF EREDMENYH ;
  63. BSF STATUS,RP0
  64. BCF STATUS,RP1 ;BANK1
  65. MOVF ADRESL,W ;Read lower 8 bits
  66. BCF STATUS,RP0
  67. BCF STATUS,RP1; BANK0
  68. MOVWF EREDMENYL
  69.  
  70. PWM_Period_Match
  71. BTFSS PIR1,TMR2IF; figyeli mikor lesz '1' azaz egyforma a pr2 es a tmr2
  72. GOTO PWM_Period_Match
  73.  
  74.  
  75. BTFSC EREDMENYH,0
  76. BSF     CCP1CON,DC1B0
  77. BTFSC EREDMENYH,1
  78. BSF     CCP1CON,DC1B1; H PWM Duty Cycle
  79. MOVF    EREDMENYL,W    
  80. MOVWF   CCPR1L  ; L PWM Duty Cycle
  81.  
  82. BCF PIR1,TMR2IF
  83. GOTO AD
  84.  
  85. END
(#) ktamas66 válasza Baxi hozzászólására (») Júl 15, 2014 /
 
Az eredmény MSB-it a PWM LSB helyeire írod be.
(#) Pali79 válasza Baxi hozzászólására (») Júl 15, 2014 /
 
Nem tudom mit szeretnél vezérelni a PWM-mel, de ha nem valami baromi precíz dologról van szó akkor elég volna az AD-ből a felső 8 bitet. Akkor sokkal egyszerűbb lenne a kód.
(#) ktamas66 válasza Pali79 hozzászólására (») Júl 15, 2014 /
 
Így sem lesz sokkal bonyolultabb, csak balra kell rendeztetni az AD eredményét .
(#) Baxi válasza ktamas66 hozzászólására (») Júl 15, 2014 /
 
A prg.-ben a 35 sorban van jobbra, balra opció. Már próbáltam és teljes kitöltést kapok már 1,278V-nál. Először 8 bittel próbáltam majd 10 bittel, mind két esetben ugyan az.
Semmi precíz dologról nincs szó, hegesztőt próbálok vele majd hajtani. Ma lesz a próba
Akkor jelenleg most az alsót a felsőbe íratom, mh... ?
A hozzászólás módosítva: Júl 15, 2014
(#) icserny válasza Baxi hozzászólására (») Júl 15, 2014 /
 
Idézet:
„Már próbáltam és teljes kitöltést kapok már 1,278V-nál.”
Mert megkeverted a bitek sorrendjét. CCP1L-be a lagmagasabb helyiértékű 8 bitet kell beírni, te viszont a 10 bites kiolvasás alsó 8 bitjét töltöd bele.

Legegyszerűbb megoldás: balra igazítva kérd az ADC eredményét, és az EREDMENYH tartalmát másold CCP1L-be!
(#) Baxi válasza icserny hozzászólására (») Júl 15, 2014 /
 
ok, köszönöm!
(#) icserny válasza Baxi hozzászólására (») Júl 15, 2014 /
 
Idézet:
„Debugolni nem tudom”
Persze, hogy nem, hiszen a normál kiadású PIC16F690 nem debugolható. AC162060 ICD headert kell a mikrovezérlő helyére dugni, azzal debugolható.
A hozzászólás módosítva: Júl 15, 2014
(#) mps hozzászólása Júl 15, 2014 /
 
Sziasztok! Szükségem lenne egy olyan cuccra, amivel egy master és töb slave beszélget egymással, viszonylag nagy távolságon. Az RS485 tűnik alkalmasnak a feladatra. No, ehhez keresek valamilyen c mintát, csak nem találok. Tudna nekem valaki ajánlani egy helyet ahol ilyet fellelhetek?
Előre is köszi!
(#) djhua hozzászólása Júl 15, 2014 /
 
Udv mindenkinek

Elkeszitetem a mellekelt faljban levo kapcsolasi rajzot . Csak nem akar sehogysem mukodni ...

Az esetemben VCC = 5V , es kezdtem meregetni az LM324 , 1-es es fold kozot a feszultseget , ami szerintem ha a feheren van akkor 5V es ha a fekete van a szenzor elott akkor 0V . De nekem konstans 3.8 V -van .... 10k ellenalas helyett 12k raktam mivel csak olyanom van .

Szerintetek annyira fontos hogy 10k vagy 12k ? Azert nem mukodik ugy ahogy kell ?
(#) mps válasza djhua hozzászólására (») Júl 15, 2014 / 1
 
A diódát és a ledet leárnyékoltad egymástól? Pl. egy darab nem átlátszó csövecskével?
(#) djhua válasza mps hozzászólására (») Júl 15, 2014 /
 
Nem sajnos koszi , kiprobalom , es jovok az eredmenyekkel .
(#) mps válasza djhua hozzászólására (») Júl 15, 2014 /
 
Első körben a diódán mérd a feszültséget.
(#) djhua válasza mps hozzászólására (») Júl 15, 2014 /
 
a fotodiodan : 4.88 V - van ... es csakugy mukodik . es mostmar tettem az infraled es a fotodioda koze egy csevetestet (mellekelt foto) .
(#) djhua válasza mps hozzászólására (») Júl 15, 2014 /
 
igy jo ? vagy tegyek ra egy kis csovecsket hogy semmi kulso feny ne erje az oldalrol .?
(#) icserny válasza mps hozzászólására (») Júl 15, 2014 /
 
Microchip AN774
A következő kérdés úgyis az lesz, hogy "milyen protokollt használjak":
Például: PIC18 Modbus example
A hozzászólás módosítva: Júl 15, 2014
(#) mps válasza icserny hozzászólására (») Júl 15, 2014 /
 
Köszi! Az elsőt megleltem, csak már távol áll tőlem az asm, de csak megértek belőle valamit
A második sem fog rosszul jönni, úgyis a modbus volt tervbe véve Igazából az adás-vétel váltása ami problémát okoz, főleg, hogy több slave lesz. Sajnos én igazán csak működő példákon keresztül tudok tanulni.
Következő: »»   546 / 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