Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1035 / 1320
(#) vilmosd válasza Csabesz04 hozzászólására (») Nov 6, 2011 /
 
Ebben nem lehet alkalmazni 16F628-at mert nincs benne AD. Amugyis a 12F675 talan 200 Ft ha van, es meg kicsi is.
(#) vaszily hozzászólása Nov 7, 2011 /
 
Sziasztok!
Egy kis segítség ill. instrukció kellene assemblerbe!
Nem rég kezdtem el foglalkozni a pic-ekkel és elakadtam.
Szeretnék csinálni egy 2 digites számlálót, de nem akar összejönni :S
Az egy digites változatot már megcsináltam,de valahogy nem tudok rájönni,hogy hogy kellene a 2 digiteset megcsinálni.

mellékelem az eddigig változatot.
  1. LIST P=16F871
  2.     #INCLUDE "P16F871.INC"
  3.     __CONFIG    0X3F32      
  4.  
  5.     CBLOCK  0X20          
  6.     T1
  7.     T2
  8.     T3
  9.     SZAM
  10.     ENDC
  11.  
  12. #DEFINE DIGIT1  PORTC,0
  13. #DEFINE DIGIT2  PORTC,1
  14.  
  15.     ORG 0
  16.  
  17. START                      
  18.     BSF     STATUS,RP0      
  19.     BCF     STATUS,RP1
  20.  
  21.     MOVLW   B'00000000'    
  22.     MOVWF   TRISB          
  23.     MOVWF   TRISC
  24.     BCF     STATUS,RP0      
  25.     CLRF    PORTB        
  26.  
  27. SZAMLAL
  28.     BSF     DIGIT2
  29.     BCF     DIGIT1
  30.     CALL    TABLA
  31.     MOVWF   PORTB
  32.     CALL    DELAY
  33.     INCF    SZAM,F
  34.     MOVFW   SZAM
  35.     XORLW   B'00001010'
  36.     BTFSS   STATUS,Z
  37.     GOTO    SZAMLAL
  38.     CLRF    SZAM
  39.     GOTO    SZAMLAL
  40.  
  41. TABLA
  42.     MOVFW   SZAM
  43.     ADDWF   PCL,F
  44.     RETLW   B'00111111'
  45.     RETLW   B'00000110'
  46.     RETLW   B'01011011'
  47.     RETLW   B'01001111'
  48.     RETLW   B'01100110'
  49.     RETLW   B'01101101'
  50.     RETLW   B'01111101'
  51.     RETLW   B'00000111'
  52.     RETLW   B'01111111'
  53.     RETLW   B'01101111'
  54.  
  55.  
  56. DELAY                      
  57.     MOVLW   B'10101000'
  58.     MOVWF   T1
  59.     MOVLW   B'00011000'
  60.     MOVWF   T2
  61.     MOVLW   B'00000110'
  62.     MOVWF   T3
  63. DELAY1
  64.     DECFSZ  T1              
  65.     GOTO    DELAY1          
  66.     DECFSZ  T2            
  67.     GOTO    DELAY1          
  68.     DECFSZ  T3
  69.     GOTO    DELAY1
  70.     RETURN                
  71.  
  72.  
  73. END


Segítségeteket előre is köszönöm...
(#) mate_x válasza Csabesz04 hozzászólására (») Nov 7, 2011 /
 
Szia!

Nem lehet helyettesíteni, mivel a 16f628-ban nincs A/D konverter, és ha lenne is akkor is át kéne írni a lábakat stb. Szerintem vegyél egy 12f675-öt, nem drága, és még a nyákba is belefér.

Üdv, mate_x
(#) Hp41C válasza vaszily hozzászólására (») Nov 7, 2011 / 1
 
- Kell egy változó a 10 -es helyiértéknek (SZAM10). Amikor a SZAM eléri a 10 -et , akkor törlöd és ekkor kell növelni a SZAM10 -et, ha az is eléri a 10 -et, akkor törölni kell.
- A delay rutint időzítését több részletben kell lefuttatni, az egyes részek között a kijelzőn a megfelelő helyiértéket kell megjeleníteni.
  1. BSF     DIGIT2
  2.     BCF     DIGIT1
  3.     MOVFW   SZAM
  4.     CALL    TABLA
  5.     MOVWF   PORTB
  6.     CALL    DELAY1
  7.     BCF     DIGIT2
  8.     BSF     DIGIT1
  9.     MOVFW   SZAM10
  10.     CALL    TABLA
  11.     MOVWF   PORTB
  12.     CALL    DELAY1

A TABLA címke utáni MOVFW SZAM utasítás nem kell.
(#) Crea hozzászólása Nov 7, 2011 /
 
Sziasztok!

Kérnék segítséget olyan valakitől aki foglalkozott AD7710-es A/D átalakítóval vagy hasonló szériával.

Hetek óta szenvedek vele és nem sikerül normális működésre bírni a hibajelenség a következő:
Az SPI kommunikáció lehetőségét jelző DRDY láb nem akar high-ról low-ra állni csak néha-néha sztochasztikus módon pl. bekapcsolásnál 1x lemegy lowra és a kommunnikáció végét jelző DRDY high a 16. bitnél megfelelően reagál, de ezt csak egyszer hajtja végre utána mondhatni a végtelenségig úgy is marad, illetve van mikor bekapcsolásnál egyáltalán nem akar lemenni megpiszkálom picit a kristályt (10.000 kvarc) és megy megcsinál párat utána megint marad egyszerűen kiszámíthatatlanul. Szakdolgozatomat írom egy mérőrendszerrel amelynek fél lelke ez lenne és egyszerűen nem jön össze el vagyok keseredve, próbáltam felhúzó/lehúzó ellenállásokat berakni, semmi változás a tápfesz normális a megadott értéken belül marad 5V (+-0,3V) a táp lábaknál 0,1µF kondik vannak berakva. 2 db ilyen IC-m van mindkettő ugyanezt a hibajelenséget generálja ugyanazzal a konfigurációval, az ajánlott összekötést az adatlap szerint követtem a kommunikáció protokollját is, nem lehet szoftveres hiba mert az A/D átalakító működését jelző DRDY nem akar LOW-ra állni és az elején nem kell semmilyen paramétert elküldeni, magától feláll és mennie kéne!

Minden ötletet, megoldást előre is köszi!!!
(#) Atielektro válasza Crea hozzászólására (») Nov 7, 2011 /
 
Az SPI jól van beállítva? Értem ez alatt az órajel alap állapotát és az adat kiléptetésének idejét, vagyis a 0.0, 0.1 stb. módokra gondolok. Vagy esetleg az nem lehetséges, hogy az utolsó bit kint marad a vonalon? Egy másmilyen SPI-os A/D konverternél nekem ez volt a probléma és ugyanúgy csak reset-kor tudtam egy bájtot beolvasni és kész. Egy plusz, felesleges bájt beolvasásával megoldódott a problémám. Hozzáteszem, hogy nem néztem az adatlapját az A/D-dnek.
(#) Hp41C válasza Crea hozzászólására (») Nov 8, 2011 /
 
Az A/D RLS jelét állítod?
(#) Crea válasza Hp41C hozzászólására (») Nov 8, 2011 /
 
RLS jel? OO Mit értesz alatta?
(#) Hp41C válasza Crea hozzászólására (») Nov 8, 2011 /
 
Bocsánat, elírtam... Az RFS jelről lenne szó.
(#) Crea válasza Hp41C hozzászólására (») Nov 8, 2011 /
 
Az adatlap szerint a DRDY lábat kell vizsgálni és utána az RFS-et LOW-ra vinni addig high-on hagyom még az elöbbi feltétel nem teljesül!
Mellékeltem a kommunikációs folyamatot amit az adatlapján találtam meg.

asd.JPG
    
(#) Crea hozzászólása Nov 8, 2011 /
 
Nem lehetséges az, hogy a DRDY értéke 312 kHZ-el változik a feldolgozás miatt és a láb sajátkapacitása miatt nem képes elkapni a mikrovezérlő az L szintű jelet?
(#) n_yálastrubadúr hozzászólása Nov 8, 2011 /
 
Szép estét.
pickit2-be lehet olyan firmware-et égetni ami megfelel a pickit3 nak mert a 16f1826-os mikov. nemfogad mást köszi. Vagy milyen megoldás létezik?
(#) vilmosd válasza n_yálastrubadúr hozzászólására (») Nov 8, 2011 / 1
 
Benne van az csak meg Te az eredeti DeviceFile-t hasznalod, ami nem tartalmazza. A MCHP oldalarol letoltheto az utolso "PK2DeviceFile-xxxxxx.dat" majd bemasolva a PK2 telepito konyvtarba mar mukodik is a dolog.
(#) Hp41C válasza n_yálastrubadúr hozzászólására (») Nov 8, 2011 /
 
A PICKit2 tudja programozni a 1.8V -os Midrange kontrollereket (pl. 16F1826...), a nyomkövetés más nem lehetséges vele. Ezen kontrollerek (és még sok más típus) nyomkövetéséhez a PICKit3 vagy ICD3 szükséges.
(#) Hp41C válasza Hp41C hozzászólására (») Nov 8, 2011 /
 
(#) n_yálastrubadúr válasza Hp41C hozzászólására (») Nov 8, 2011 /
 
Köszi
jó éjt!
(#) icserny válasza n_yálastrubadúr hozzászólására (») Nov 8, 2011 /
 
Idézet:
„lehet olyan firmware-et égetni ami megfelel a pickit3 nak?”
Nem lehet, mert egészen más felépítésű.
(#) pontazok válasza Hp41C hozzászólására (») Nov 9, 2011 /
 
Köszönöm a válaszod.
Én CCS-ben fejlesztek és úgy látom hogy az LCD beállításaival lesz gondom.Definiálom az LCD kivezetéseit aztán inicializálom stb.Azonban pár forráskódban azt látom hogy meg kell adni még pár dolgot viszont nem tudom a netes forráskódokból hogy vajon nekem melyik lenne a jó.
Tehát az LCD vezérlésem életképes csak a konfigolása nem sikerült még normálisan,
(#) watt válasza pontazok hozzászólására (») Nov 10, 2011 /
 
Én minden programomat az LCD adatlapja szerint írtam meg. Mind működik. Javaslom, hogy ne a neten keress példákat, hanem az adatlap szerint járj el!
(#) Moderátor hozzászólása Nov 10, 2011
 
JDM égető probléma áttéve ide: PIC égetési hibák, problémák, kérdések
(#) jocc hozzászólása Nov 12, 2011 /
 
Sziasztok! Egy kis segítség kellene a PIC12F615 külső megszakítására. Megírtam a kódsort próbaképp, proteusban szimuláltam de ott se megy.
Az lenne itt a kérdés hogy miért nem ugrik be a megszakitásba? Elvileg minden jól be van állítva...
A kód mikropascal-ban van írva:


  1. program pic12f615_intGP2;
  2. //-------------------------------------------
  3. procedure interrupt;
  4. begin
  5. clearbit(intcon,inte); clearbit(intcon,intf);
  6.       gpio.1:=%1;
  7.       delay_ms(10);
  8.       gpio.1:=%0;
  9.       delay_ms(10);
  10. setbit(intcon,inte);
  11. end;
  12. //-------------------------------------------
  13. begin
  14. option_reg:=%11000000;
  15. trisio:=%00000100;
  16. intcon.gie:=%1; intcon.inte:=%1;
  17.  
  18.  
  19. gpio.0:=%1; delay_ms(500); gpio.0:=%0;  delay_ms(10);
  20.  
  21. sleep;
  22. //*************
  23. repeat
  24. gpio.0:=%1; delay_ms(10); gpio.0:=%0;  delay_ms(10);
  25.  
  26. until true=false;
  27. //*************
  28. end.
(#) jocc válasza jocc hozzászólására (») Nov 12, 2011 /
 
Megvan a megoldás...
az analóg beállításoknál az ansel-t teljesen nullázni kell...
ansel:=%00000000;
(#) watt válasza jocc hozzászólására (») Nov 12, 2011 /
 
Az egészet nem kell, de a 3:0 biteket igen, ha digitális portokat akarsz...
(#) Kisvé hozzászólása Nov 12, 2011 /
 
Helló!
Most kezdtem el foglalkozni 16bites PIC-ekkel. Addig el is jutottam, hogy szubrutinból késleltetéssel villogtattam egy LED-et. Ezután a Timer5 megszakítást akartam életre kelteni, ami már nem jött össze. A szimulátor szerint, mikor a megszakításba kéne lépnie resetel egyet, és után (bár a flagek jól állnak) nem lép se megszakításban, se nem resetel többet. Ha tudnátok segíteni, azt nagyon megköszönném.
  1. .include "p24hxxxx.inc"
  2.  
  3. .bss
  4.  
  5. szam1:.space 2
  6. szam2:.space 2
  7.  
  8. .global __reset            
  9. .global __T5Interrupt
  10.  
  11. .text                      
  12.  
  13. __reset:
  14. ;Stack init
  15.     MOV #__SP_init, W15      
  16.     MOV #__SPLIM_init, W0    
  17.     MOV W0, SPLIM
  18.     NOP  
  19.  
  20. ;I/O beállítása
  21. BCLR TRISA, #4  ;PORTA,4 digitális kimenet
  22. CLR AD1PCFGL
  23. ;T5 beállítása
  24. BCLR T5CON,#T32  ;T5 16bites
  25. BCLR T5CON,#TCKPS0  ;Nincs elősztó
  26. BCLR T5CON,#TCKPS0
  27. BCLR T5CON,#TGATE  ;Nincs Gate
  28. BCLR T5CON,#TCS  ;Időzítő
  29. MOV #0X0010,W0  ;0X0010-ig számol
  30. MOV W0,PR5
  31. BSET T5CON,#TON  ;T5 indítása
  32. ;Megszalítások beállítása
  33. MOV#0X00007,W0  ;T5 Prioritása 7
  34. IOR IPC7
  35.     BCLR IFS1, #T5IF   ;T5 megsz. flag törlése
  36. CLR TMR5
  37. BSET IEC1,#T5IE  ;T5 megsz. engedélyezése
  38.  
  39.  
  40.  
  41. MAIN:
  42. GOTO     MAIN          
  43.  
  44.  
  45. _T5Interrupt:
  46.         BCLR IFS1, #T5IF   ;Clear the Timer1 Interrupt flag Status    
  47. BTG LATA,#4                        
  48. RETFIE
  49.  
  50. .end
(#) beri5tib hozzászólása Nov 12, 2011 /
 
Sziasztok !
Egy kis segítséget szeretnék kérni, van egy olyan gond, hogy PICel 4bites módban vezérlem a kijelzőt, a következő módon.
-- Az LCD modul EN vezérlő jelének pulzálása
void lcd_en_pulse(void)
{
delay_us(50);
OUTPUT_BIT(lcd_en,1);
delay_us(50);
OUTPUT_BIT(lcd_en,0);
delay_us(50);
}

//-- Várakozás a foglaltság megszűnésére
void wait_lcd4_busy(void) {
char bflag;
OUTPUT_BIT(lcd_rs,0); //RS = 0 Busy Flag olvasáshoz
SET_TRIS_B(0xF0); // adatport olvasásra
OUTPUT_BIT(lcd_rw,1); // R/W = 1, olvasáshoz
do {
OUTPUT_BIT(lcd_en,1); delay_us(40); // felső 4 bit olvasása
bflag = INPUT(PIN_B7);
OUTPUT_BIT(lcd_en,0); delay_us(40);
lcd_en_pulse(); // az alsó 4 bit olvasása
} while(bflag);
OUTPUT_BIT(lcd_rw,0); // R/W = 0, íráshoz
SET_TRIS_B(0x00); // adatport írásra
}

//-- Fél adatbájt írása
void lcd_write_nibble(unsigned char data) {
OUTPUT_BIT(lcd_rw,0); // R/W = 0, íráshoz
OUTPUT_B( data & 0xF0); // a felső félbájtba írunk
if (rsmode==1)
{OUTPUT_BIT(lcd_rs,1);}
else
{OUTPUT_BIT(lcd_rs,0);}
lcd_en_pulse();
}

//-- Egy bájt kiírása 4 bites üzemmódban
void lcd4_write(unsigned char data) {
lcd_write_nibble(data); //felső nibble írása
lcd_write_nibble(data << 4); //alsó nibble írása
if(chk_busy) {
wait_lcd4_busy();
} else {
delay_us(40); //40 usec delay
}
}

//-- Adatbájt írása (RS=1)
void lcd4_data(unsigned char data) {
rsmode=1; // adat mód
lcd4_write(data); // az adat kiírása
}

//-- Parancsbájt írása (RS=0)
void lcd4_command(unsigned char data) {
rsmode=0; // utasítás mód
lcd4_write(data); // az adat kiírása
}

Nos a gondom az hogy minden tökéletesen működik szépen tudom vezérelni a kijelzőt. A gond ott kezdődik, hogy folyamatos üzemben egyszer fogja magát a kijelző és hülyeségeket futó össze-vissza karaktereket kezd el irogatni. A vezérlés a pic tökéletesen működik, mert más funkciók mennek, csupán a kijelző ír hülyeségeket. Ez esetleg időzítési gond lehet, vagy valami más miatt bolondul meg a kijelző? Ha van valakinek valami ötlete akkor légyszi ossza meg velem.
Köszi.>>
(#) Kisvé válasza Kisvé hozzászólására (») Nov 12, 2011 /
 
Meg van a megoldás!
__T5Interrupt: - ból lemaradt egy az egyik _ . Emiatt szívni órákat... Köszönöm mindenkinek, aki esetleg ebben a rövid időben már is foglalkozott vele.
(#) icserny válasza Kisvé hozzászólására (») Nov 12, 2011 /
 
Az általam is használt (a Mississippi Állami Egyetem oktatói által kifejlesztett és közzétett) C nyelvű PIC24 támogatói programkönyvtárat érdemes lenne megnézni! Az egyik dolog, ami hasznos segítség: az esetleges RESET-ek után meg kell néni és ki kell íratni a resetelés okát. A másik dolog, ami hasznos segítség: a nem használt megszakításvektorok, valamint a kivételek alapértelmezetten egy olyan eljárásra mutassanak, ami kiírja a hiba (vagy elkalandozott megszakítás) okát.

A kiíratás egy olcsó USB/UART konverteren keresztül egyszerűen megoldható.
(#) Kisvé válasza icserny hozzászólására (») Nov 12, 2011 /
 
Értem. Köszönöm a tanácsot.
(#) dieter84 hozzászólása Nov 14, 2011 /
 
Sziasztok! A következő kérdéssekkel fordulok hozzátok:
1: Lehet-e bármilyen PIC TOCKI lábával 0-5V egyenfeszültség impulzusokat mérni? A láb TMR0 counter módban van. Ha igen, akkor milyen ellenállás-kapcsoláson keresztül? Kb., mint frekvenciamérő.
2: A kapott értéket TMR0 regiszterben lehet-e szorozni konstans értékkel? Értsd.: pl. frekvenciamérőnél 1000ms alatt mér a számláló 50 impulzust. Ennek a számnak a 6.5 szeresét akarom kivezetni karakteres LCD-re, tehát állandóan 325-öt kellene kapni. A példa haszontalan, a megoldókulcs érdekel. Elnézést, ha esetleg már volt hasonló kérdés. Előre köszönöm a segítségeteket!
(#) H2opok hozzászólása Nov 14, 2011 /
 
Üdv
Lenne egy lehetőség!
Egy kedves ismerős tervezett jó pár -16 tipus- smd pic programozó adaptert (+ van rajta 4db AVR is, 2 oldalas furatgalvános lesz), és egy nyákgyártó cégnél profin le tudnánk gyártatni.
Ha van rá igény, jellezzétek pü-ben, és annyival többet csináltatunk. Kb. j.hét végére készen van.
A mellékelt fotón látni miről van szó.
3mm-es anyás megoldást láttuk a legjobb megoldásnak, hogy programozás közben rögzíteni lehessen a kontrollert.
Következő: »»   1035 / 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