Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   934 / 1320
(#) kissi válasza Pepebá hozzászólására (») Márc 14, 2011 /
 
Nézd meg a 1-wire rutinokat, lehet OW, stb. ( nem emlékszem már hogyan írják a mikroe függvényei! ), de emlékszem, hogy láttam, csak most nincs ezen a gépemen!

Steve
(#) dtocy hozzászólása Márc 14, 2011 /
 
Hello!

Akadt egy kis problémám. PIC16F88-nak betelt a 4 kword-os memóriája, de nekem még nagyon kéne a hely.
Arra gondoltam, hogy az eepromot úgysem használom, ezért valahogy fel lehetne használni, vagy tévedek?

A segítséget előre is köszönöm!
(#) watt válasza dtocy hozzászólására (») Márc 14, 2011 /
 
Tévedsz. Vegyél egy nagyobb PIC-et...
(#) dtocy válasza watt hozzászólására (») Márc 14, 2011 /
 
Az kár. Azért kösz!
(#) puli122 hozzászólása Márc 14, 2011 /
 
Sziasztok.
Hamarosan Pic tanfolyamot indítunk, azonban érdekelne, szerintetek mit vegyünk bele a tematikába. Az alap már összeállt, ( most a kezdő csoportról beszélek ), de szívesen venném az ötleteiteket.
Az biztos hogy az elején kis digitális elektro lesz, ismerkedés a kontrollerekkel, aztán Pickit2 és MpLAB használata, a hozzá való assemblyvel. Majd ha az alapok megvannak, esetleg C-ben a folytatás.
Mindez mintaprogramokkal és demo panelekkel bőven illusztrálva.
Ha van valami ami szerintetek hasznos lenne még, azt megköszönném ha megosztanátok velem.

Előre is köszi
(#) Hp41C válasza dtocy hozzászólására (») Márc 14, 2011 /
 
Szia!

Az adat eepromot fel helet használni a konstans táblázatok adatainak tárolására retlw utasítások helyett..
(#) Ideiglenes válasza dtocy hozzászólására (») Márc 15, 2011 /
 
Ilyenkor érdemes egy kicsit átbogarászni a programot. Előfordulhat, hogy imitt amott egy banksel elhagyható, vagy más egyéb ötlettel javítható a kód tömörebbre. Például az ismétlődő részeket egy eljárásba áttenni és azt meghívni.
Én az SDCC-vel jártam úgy, hogy már majdnem betelt a programtár, amikor frissítettem a fordítót. Nem hittem a szememnek, hogy mennyit csökkent a kódméret ezután. Szóval érdemes lehet még annak is utánanézni, hogy a fordítódnak ( ha nem assemblyben csinálod ), van-e valami újabb változata. Talán még az is segíthet.
(#) bankimajki hozzászólása Márc 15, 2011 /
 
Sziasztok, már egy fél órája azon agyalok, hogy ha van egy érték. (pl. az AD értéke 0-1024) És ezt ki szeretném íratni egy sima kijelzőre, (amire már megírtam egy alap kis programot). Akkor, hogy döntsem el azt hogy a helyiértékeknek mennyi az értéke decimálisan? pl. D'255'
kiírva:
- első helyiérték:5
- második helyiérték:5
- harmadik helyiérték: 2
Én bitenként vizsgálatokra gondoltam, de az elég komplikáltnak tűnik, biztos van rá valami egyszerű megoldás.
(#) bankimajki hozzászólása Márc 15, 2011 /
 
Találtam megoldást.
(#) Pepebá válasza kissi hozzászólására (») Márc 15, 2011 /
 
Köszönöm a válaszokat, próbálkozom.
Üdv.
(#) SmithWebster hozzászólása Márc 15, 2011 /
 
Sziasztok!

Van egy olyan problémám amivel már hetek óta küzdök! Remélem tud valaki segíteni. Leírom mi a helyzet.

Van egy attiny45 és ennek az egyik kimenete rá van kötve egy aurel tx-4msil adóra. A vevő részt egy pic16f690 végzi, a rx lábára van kötve a vevő rész ami egy aurel bc-nbk.

A következő a problémám: az attiny45-el próbálok szoftveres uart-al adatot küldeni. A vevő részen pedig a beépített pic-c fordító függvényét használnám, (rs232). Itt beállítom a megfelelő pin-t. És már mindenhogy próbáltam, de nem tudom szinkronizálni valahogy őket.

Látják egymást, tehát adatot küld az adó, a vevő meg vesz, de hiába, mert nem jót vesz a vevő.

Gondolom az időzítéssel lesz a gond, de már szinte minden elképzelhetőt próbáltam.

A baud 1200. Ennyivel küldöm és elvileg ennyivel venném is ha sikerülne.
Itt a hobbin van egy cikk a szoftveres uartról, úgy oldottam meg az attiny45 kódjában. A vevő részt meg minden kódolás nélkül egyenlőre csak az rs232-vel oldanám meg, úgy hogy ha a kbhit true akkor lekérem egy változóba a stream értékét.

Az adó oldalon úgy van megoldva, hogy van egy start bit meg van egy stop bit, plusz közötte van az adat.

A másik kérdés - ami még eszembe jutott, hogy esetleg lehet probléma - hogy a pic -c függvényében (így van beállítva: #use rs232(baud=1200, rcv=PIN_C7, stream=radio) ) esetleg az lehet, hogy a függvény nem a 10 bites formát várja (1start+1stop+8adatbit).

Ha valakinek van valami ötlete, hogy mi lehet a gond, legyen szíves segítsen, mert tényleg már nagyon régóta próbálkozok vele (már a sulimba is bevittem az egyik tanáromnak, de nem tudott vele mit kezdeni)

Előre is köszönöm a segítségeteket!

Üdv,
smithwebster
(#) Hp41C válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
Szia!

Miért erőlködsz a szoftveres uart -tal a 16F690 -nel, amikor beépített uart egysége is van (az Rx kivezetés ugyan az RB5)?
(#) watt válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
RF-en keresztül jelet simán nem nagyon lehe átvinni. A 8 nulla nem fér át, és a 8 egy sem. Erre találták ki a manchester kódolást, ahol a jelfolyam elektromos középértéke állandó, nem csúszik el az átvitt adattól függően. Itt is találsz erről infót: Bővebben: Link
(#) SmithWebster hozzászólása Márc 15, 2011 /
 
Köszönöm a válaszokat! Amúgy próbáltam már mindent. Az Rc7-en, azért van mert jelenleg egy pic16f887-el tesztelek (de majd később egy pic16f690-el fog menni). Plusz a manchester kódolással is próbálkoztam már.

Tudom, hogy nem lehet csak 0 átvinni vezetéknélkül, mert a változásokra reagál, de gondolom azért van a start bit. Ugye van ez a AGC benne, burst megy, és utána elvileg start, ilyenkor ugye változik a jelszint, ezt érzékelnie kéne a vevő oldalon, és a megfelelő időközönként mintavételeznie kellene (így tehát akár átmehet 8 db nulla is)... Legalábbis én ezt vettem ki a dolgokból...

Bár most találtam valamit, ami lehet, hogy probléma... Elméletileg a vevő oldalon pic-c-ben a delay + oszci hatással lehet a dologra. Mármint hogyha nem ugyanarra vannak állítva.

Na, majd még próbálkozok. Ha valakinek eszébe jut valami legyen szíves ne tartsa magában.

Üdv,
smithwebster
(#) Hp41C válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
Szia!

A 16F887 -ben is van uart - az RC6 a vételi kivezetés, az RxD...

A vétel megvalósítása bonyolultabb, mint az adásé. Az RxD lefutó éle után először 1.5 bit idő múlva kell mintát venni, azután 8-szor 1 bitidő múlva. A végén ellenőrizhető 1 bitidő múlva a stopbit. Mindezt feladatot az uart illesztő megcsinálná...
(#) SmithWebster válasza Hp41C hozzászólására (») Márc 15, 2011 /
 
Szia!

Köszönöm a válaszodat!

Az adatlap azt írja, hogy az rx láb az rc7.

Én is úgy gondoltam, hogy az alap beépített függvénnyel oldom meg, de azzal nem megy. A szoftveres rész az adóhoz kell (mivel az attiny45-ön nincs rx/tx láb), a vevő meg normálisan.

Sajnos így se ment valamiért (mármint úgy hogy a küldés szoftveres, a vétel meg a beépített dolgokkal). Már próbáltam sokféleképpen. Biztos valami elkerülte a figyelmemet, de még kezdő vagyok, próbálkozok, sajnos nem mindig jön össze.

Üdv,
smithwebster
(#) potyo válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
Ha a rádiós adó és vevő nélkül direktben kötöd össze, akkor átmegy normálisan? Csak mert előbb úgy kellene beüzemelni, és akkor utána lehet a helyzetet rontani az adóvevővel.
(#) bankimajki hozzászólása Márc 15, 2011 /
 
Sziasztok írtam egy kis progit, aminek az lenne a célja, hogy a PORTA,0-ás analóg értékét kiírja egy 4db közös anódos kijelzőre. (Amelyeknek az anódjai 7db párhuzamosan vannak kötve.) A proginak ez a része működik, ami az értéket kiírja, de az A/D megszakítás lekezelése szerintem valamit elront. És nem bírok rájönni, hogy mi a hibás. A kiírandó érték az EREDMÉNY nevű regiszterbe kerül. Légyszíves segítsen valaki a hiba megtalálásában. Elég csak az elejét a START címkéig nézni, mert szerintem abban a részben lesz a hiba.

adkij.asm
    
(#) Hp41C válasza bankimajki hozzászólására (») Márc 15, 2011 /
 
Szia!

- A mentésnél/ visszaállításnál kimaradt a STATUS regiszter.
- Nem kell állítani az INCON,GIE bitet. ld. Cikk.
(#) Hp41C válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
Szia!
- Valóban elírtam, az RC7 a RxD láb. Elnézést...
- Mivel programozod a pic-ek? Talán PICKit2 -vel? Az egyben egy TTL szintekkel rendelkező USB - uart is. Próbáld meg a következőt:
Írj egy teszt programot, ami a vett karaktereket visszaküldi az uart -tal. Csatlakoztasd a PICKit2-t az USB porthoz, indítsd el a PICKit2 kezelő programját, Tools/Uart tool, csatlakoztasd a GND, Vdd, adási és vételi vonalakat a 16F887 -hez. Indítsd el a pic-et. A PICKit2 programban állítsd be a Baudrate -t, Connect, az uart kezelő ablakjában alul levő sorokba írj üzenetet, nyomd meg a mellette levő Send gombot... A középső nagy mezőben meg kell jelenjen a vett karakter/üzenet.
A Vdd vonalon feszültséget kell érzékeljen a PICKit2 vagy a PICKit2 lássa el táppal a kontrollert. Az utóbbi esetben a Connect előtt a Vdd -t be kell kapcsolni.
(#) SaNyEee1986 hozzászólása Márc 15, 2011 /
 
Sziasztok!

Segítségre lenne szükségem, problémám a következő:

Fordulatszámot szeretnék majd kiírni Grafikus LCD kijelzőre, Capture + Timer1-el, belső OSC-vel.
Jelenleg próbaképp csak időt szeretnék mérni két gombnyomás között, ami eleinte jól is megy, de X gombnyomás után nem frissíti a kijelzést. A kódban lehet látni, hogy hőmérsékletet is mér. Azt a "lefagyás" után tökéletesen frissíti és jól mutatja, csak a gombnyomások közötti időt az istennek sem akarja. A PIC memóriája nincs betelve, tehát ez nem lehet a probléma. Ezt úgy kell elképzelni, hogy kb. 30-szor megnyomom a gombot(nincs pergésmentesítve) 1 másodperces időközökkel 15-öt mutat mindig, mert annyit is kell (timer2 túlcsordulásainak száma). de kb. 30 gombnyomás után nem frissít tovább. Valamikor ez hamarabb következik be, valamikor később. Jelgenerátorral is próbáltam, ott is néhányat kijelzett utána se kép se hang.

A pontosítás után rákötöttem a CCP1-et egy jelgenerátorra, hogy pontos 1HZ-s jelet kapjon a PIC, és a túlcsordulás száma pontosnak mondható, de a TMR1 értéke nem áll be pl. egy 500Hz-s értéknél fix értékre. 15 Hz-es freki után 0-t kell kijeleznie és ez megy is, de az említett probléma miatt csak rövid ideig. Mondom, hőmérsékletet frissíti a hiba beállta után is.

Íme a kódrészlet:

  1. char GLCD_DataPort at PORTD;
  2.  
  3.       sbit GLCD_CS1 at RC6_bit;
  4.       sbit GLCD_CS2 at RC5_bit;
  5.       sbit GLCD_RS  at RC0_bit;
  6.       sbit GLCD_RW  at RC7_bit;
  7.       sbit GLCD_EN  at RC3_bit;
  8.       sbit GLCD_RST at RC4_bit;
  9.       sbit GLCD_CS1_Direction at TRISC6_bit;
  10.       sbit GLCD_CS2_Direction at TRISC5_bit;
  11.       sbit GLCD_RS_Direction  at TRISC0_bit;
  12.       sbit GLCD_RW_Direction  at TRISC7_bit;
  13.       sbit GLCD_EN_Direction  at TRISC3_bit;
  14.       sbit GLCD_RST_Direction at TRISC4_bit;
  15.  
  16.       unsigned int ido_seged=0;
  17.       unsigned int tulcsordul=0, nyomas=0, nyomas2=0, ido_L=0, ido_H=0;
  18.       unsigned temp;
  19.       unsigned int fuel2;
  20.       char text[15], *text2;
  21.       int seged=0;
  22.  
  23.       void nyomas_kiir()
  24.       {
  25.               delay_ms(100);
  26.               WordToStr(ido_H, text);
  27.               Glcd_Write_Text(text, 35, 6, 1);
  28.               WordToStr(ido_seged, text2);
  29.               Glcd_Write_Text(text2, 35, 7, 1);
  30.               ido_seged=0;
  31.               nyomas2=0;
  32.       }
  33.       void interrupt()
  34.       {
  35.             if(PIR1.CCP1IF==1)
  36.             {
  37.             nyomas2=1;
  38.             ido_L=CCPR1L;
  39.             ido_H=CCPR1H;
  40.             CCPR1L=0;
  41.             CCPR1H=0;
  42.             delay_ms(100);
  43.             tulcsordul=0;
  44.  
  45.                PIR1.CCP1IF=0;
  46.             }
  47.  
  48.             if(PIR1.TMR1IF)
  49.             {
  50.             ido_seged++;
  51.             if(ido_seged==6000)
  52.             ido_seged=0;
  53.             delay_ms(100);
  54.  
  55.             TMR1L=0;
  56.             TMR1H=0;
  57.             PIR1.TMR1IF=0;
  58.             }
  59.       }
  60.       void main()
  61.       {
  62.  
  63.            ANSEL=0x01;
  64.            ANSELH=0x00;
  65.            C1ON_bit=0;
  66.            C2ON_bit=0;
  67.            T1CON=0x01;
  68.            PIE1.TMR1IE=1;
  69.            PIE1.CCP1IE=1;
  70.            INTCON.GIE=1;
  71.            INTCON.PEIE=1;
  72.            CCP1CON=0x04;
  73.            RC2_bit=1;
  74.            TRISC2_bit=1;
  75.            TRISC1_bit=0;
  76.            RC1_bit=0;
  77.        
  78.            Glcd_Init();                                 // Initialize GLCD
  79.            Glcd_Fill(0x00);                               // Clear GLCD
  80.            TRISA=0xFF;                               // PORTA is input
  81.            TRISE=0x00;
  82.  
  83.            Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32);
  84.            Glcd_Write_Text("Temp:", 3, 1, 2);
  85.  
  86.         do
  87.         {
  88.               ow_reset(&PORTE,2);
  89.               ow_write(&PORTE,2,0xEE);
  90.               ow_reset(&PORTE,2);
  91.               ow_write(&PORTE,2,0xAA);
  92.               temp=ow_read(&PORTE,2);      
  93.        
  94.               Glcd_Set_Font(Font_Glcd_Character8x7, 8, 7, 32);
  95.               WordToStr(temp, text);
  96.               Glcd_Write_Text(text, 71, 1, 1);
  97.        
  98.               if(nyomas2==1)
  99.               nyomas_kiir();
  100.        
  101.         } while(1);
  102.       }


-PIC16F887, 4MHz, mikroC compiler,

-A kristály frekvenciáját, illetve a PIC egy két alapbeállítását a program menüjéből lehet állítani.

Kérlek segítsetek, mert nem tudom hol lehet a hiba.


Előre is köszönöm!
(#) SmithWebster válasza Hp41C hozzászólására (») Márc 15, 2011 /
 
Köszönöm a segítségeket!

Huh, PicKit2-vel programozok, de nem is tudtam, hogy ilyen lehetőség van benne! Nagyon jó, hogy ezt elmondtad, köszönöm szépen!

Most is úgy működik, hogy a tesztpanel táplálja a vevő részt.

Potyo-nak is köszönöm, igazából igazad van, úgy lett volna célszerűbb először, ki fogom úgy is próbálni.

Remélhetőleg össze fog jönni, ha sikerül megosztom mi volt a probléma, hátha másnak is lesz/van hasonló gondja.

Üdv,
smithwebster
(#) bankimajki válasza Hp41C hozzászólására (») Márc 15, 2011 /
 
Köszönöm, már az a rész is működik. De a probléma a következő mivel folyamatosan megy az AD, így nem marad ideje a kijelzésre. Ezt hogy szokták megoldani? Úgy hogy pl. 1 sec.-ban pl. csak 5-ször nézi meg az A/D-t?
(Mivel jelenleg a kijelzőre egy sima 3-ast ír.) És megcsináltam azt hogy a fő programban növeltem a regiszter értékét, de erre sem reagált. (Vagyis az A/D folyamatosan sokkal gyorsabban felülírja. És olyan gyakran jön a megszakítás, hogy még a kiírásra sem marad elég idő.)
(#) bankimajki hozzászólása Márc 15, 2011 /
 
Nagyon buta vagyok, végig rossz hexet égettem a PIC-be, azért írt ki hülyeséget a kijelzőre. (Mert az még a korábbi teszt volt.) Már jól működik.
(#) Auf hozzászólása Márc 15, 2011 /
 
Sziasztok!
Abban kérném a segítségeteket, hogy pickit 2-vel, hogy tudok kiolvasni egy 16C72A-típust?
(olvasgattam már ezügyben, de nem találtam olyan device file-t)
Köszi.
(#) Hp41C válasza Auf hozzászólására (») Márc 15, 2011 /
 
Szia!

A PICKit2 nem tud elegendő áramot adni a Vpp vonalon a 16C sorozat egyszer programozható tagjainak. (A 16C83 és a 16C84 többször programozható.)
(#) SmithWebster válasza potyo hozzászólására (») Márc 15, 2011 /
 
Szia!

Na, teszteltem adó/vevő nélkül! Simán átmegy. Ha ugyanezt adóval + vevővel próbálom össze vissza küld.

Valaki ötlet?

Üdv,
smithwebster
(#) SmithWebster válasza SmithWebster hozzászólására (») Márc 15, 2011 /
 
Értelemszerűen olyan adatokat küldök át, amit normálisan el tud küldeni az adó, pl 0x55
De az se megy át.

Üdv,
smithwebster
(#) bankimajki hozzászólása Márc 15, 2011 /
 
Azt hogy lehet megvalósítani, hogy az AD konverzió után az ADRESH és ADRESL értéke 2 külön porton megjelenjen. (Nekem uyganaz jelenik meg mindig.) 16F877-es kontrollerrel játszom. Íme a részlet amivel játszok:
INIT
BANK1
MOVLW 0xFF
MOVWF TRISA
CLRF TRISB
CLRF TRISD

MOVLW b'00000111' ; TMR0 1:256
MOVWF OPTION_REG
MOVLW b'11100000' ; GIE,PIE,TMR0IE
MOVWF INTCON


MOVLW B'10000010'
MOVWF ADCON1

BANK0
MOVLW b'01000000' ;
MOVWF ADCON0

GOTO START

;****************************************************************************

INT_SERV


BCF INTCON,T0IF
BSF ADCON0,ADON
MOVLW 0x19
MOVWF KESLELTET
DECFSZ KESLELTET
GOTO $-1
BSF ADCON0,2
BTFSC ADCON0,2
GOTO $-1
BCF ADCON0,ADON

MOVFW ADRESL
MOVWF PORTB

MOVFW ADRESH
MOVWF PORTD



RETFIE

;****************************************************************************

START

GOTO START

END
(#) Hp41C válasza bankimajki hozzászólására (») Márc 15, 2011 /
 
Más bank -ban vannak, a címeik alsó 7 bitje egyezik...
(((banksel makro)))
Következő: »»   934 / 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