Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   812 / 1320
(#) robing16 válasza watt hozzászólására (») Okt 7, 2010 /
 
Szia, igaz

Jelenleg 16F877A típusú PIC-el dolgozom, de 16F628-ason fogom alkalmazni a DMX feldolgozást.
A Példa ugyan EUSART-ra vonatkozik, ám egy 16F628-as PIC olcsóbb, mint egy 18F-es család...

  1. Procedure Loading;


Ez a kód beállítja az USART-ot egy belső script segítségével. Megpróbáltam felinicializálni kézzel, de nem minden regiszter bit jelentése értelmes számomra, a PIR és PIE jelző regisztereknél akadtam el...
Forrás Link
A leíráson nem tudtam eligazodni.

És még van egy főprogram, ami egy végtelen ciklust generál, ha az RCSTA Regiszterben FERR Bit "1"-re vált, akkor egy Frame Error hiba keletkezett, ekkor bekapcsolja a PORTD-nek pár kimenetét.

  1. begin
  2. Loading;
  3.  while ...

Pascalkod.txt
    
(#) icserny válasza robing16 hozzászólására (») Okt 7, 2010 /
 
Idézet:
„A Példa ugyan EUSART-ra vonatkozik, ám egy 16F628-as PIC olcsóbb, mint egy 18F-es család...”
Nem hiszem, hogy 100 Ft-ért (kb. ennyivel több a PIC18F13K22 vagy a PIC18F24K22) érdemes a PIC16F628A-val szerencsétlenkedni.
(#) robing16 válasza icserny hozzászólására (») Okt 7, 2010 /
 
A linked alapján nem 100Ft, hanem 1000Ft a külömbség. 16F628 350Ft-ba kerül most. Persze, ki hol vásárol...
De attól függetlenül érdekelne, hogy hogyan lehet egy sima USART-al megoldani.
(#) icserny válasza robing16 hozzászólására (») Okt 7, 2010 /
 
Idézet:
„Van valakinek ötlete?”

Igen, van. A beérkező karaktereket ki kell olvasni!
  1. WaitBreak
  2.     btfsc PIR1,RCIF ; if a byte is received correctly
  3.     movf RCREG,W ; discard it
  4.     btfss RCSTA,FERR ; else
  5.     bra WaitBreak ; continue waiting until a frame error is detected
  6.     movf RCREG,W ; read the Receive buffer to clear the error condition
(#) icserny válasza robing16 hozzászólására (») Okt 7, 2010 /
 
Idézet:
„A linked alapján nem 100Ft, hanem 1000Ft a különbség.”

Viccelsz? Nézd meg a hivatalos forgalmazó, a ChipCAD árlistáját! Az alábbiak nettó árak:
16F628A-I/P 380 Ft (jelenleg nincs raktáron)
18F13K22-I/P 470 Ft
18F23K22-I/SP 450 Ft
18F24K22-I/SP 490 Ft
Idézet:
„16F628 350Ft-ba kerül most.”
Hol?
(#) Hp41C válasza icserny hozzászólására (») Okt 7, 2010 /
 
Sziasztok!

Azért előbb elolvasnám a 18F típusok UART egységre vonatkozó Errata bejegyzéseket. Sok típusnál 4-5 hiba is előfordul bennük... pl. 18F1xK22 errata

A PIC18F24K22 szerencsésebb választás, az errata nem tartalmaz uart hibát.
(#) watt válasza robing16 hozzászólására (») Okt 7, 2010 /
 
Icserny segítségéhez még annyit, hogy első körben érdemes csak egy LED-el a kimeneten azt detektálni, hogy a FERR bebillent-e, és a LED maradjon égve, ha igen. Ha eddig megvagy, jöhet a további vizsgálat, ha szükséges, bár ha már bebillent, akkor már nem a LED-et fogod billegtetni, miután megvan a várva várt esemény...
Pascal-ban nem vagyok otthon, de abban kb. így nézhet ki...

  1. PORTD:=0
  2. while true do
  3.  begin
  4.   if PIR1.RCIF=0 then
  5.      a=RCREG
  6.   else  
  7.     If RCSTA.FERR = 1 then
  8.     PORTD:=15
  9.     end;
  10.   end;
  11.  end.

Ha ez megvan, akkor a hiba akkor fog törlődni, ha újból kiolvasod az RCREG-et...
(Lehetőség van a Kód gomb használatára, akkor lesz ilyen a beszúrt forrás)
(#) robing16 válasza watt hozzászólására (») Okt 7, 2010 /
 
Igen, ezt már próbáltam, hogy egy kimenetet múltkor az A/D tesztelésére használtam, és 8db LED áll rendelkezésre.
Pontosan már próbáltam a bebillentéssel, és nem ment, egyszer sem billent be, a PIC bemeneti lábán látom az adatokat Oszcilloszkóppal, de a bebillentés valahogy nem akar megtörténni...
Ezért gondoltam, hogy hátha a beépített kódban van elrejtve a gond, és kézzel állítom be a Regisztereket, de
a PIR és PIE -nél elakadtam.
(#) trudnai válasza robing16 hozzászólására (») Okt 7, 2010 /
 
Nyilvan a port inicializalassal van a gondod. Nezdd meg az adatlapban a portd milyen eszkozokkel osztozkodik es hogyan kell azokat kikapcsolni (pl AD vagy analog comparator)
(#) Hp41C válasza watt hozzászólására (») Okt 7, 2010 /
 
Sziasztok!

Már többször leírtam, hogy kötött sorrendben kell olvasni az RCSTA és RCREG regisztereket, mert az utóbbi olvasása a vételi fifo-t is lépteti, aminek része az RCSTA register FERR és RX9D bit is.

  1. PORTD:=0
  2. while true do
  3.  begin
  4.   if PIR1.RCIF=1
  5.   then
  6.    begin
  7.     s:=RCSTA;               /* Olvasni az RCREG előtt kell  */
  8.     a:=RCREG;              /* Törli a PIR1.RCIF bitet, lépteti a fifo-t */
  9.     if (s and (1 shl FERR)) = (1 shl FERR)
  10.      then
  11.         PORTD:=15;        /* Keretezési hiba jelzése */
  12.     if (s and (1 shl OERR)) = (1 shl OERR)
  13.      then
  14.       begin
  15.         RCSTA.CREN:=0; /* A ráfutás hiba törlése csak a vevő kikapcsolásával lehetséges. Ha nem töröljük, megakadályozza a további vételt */
  16.         RCSTA.CREN:=1;
  17.       end;
  18.     end;
  19.  end.
(#) watt válasza Hp41C hozzászólására (») Okt 7, 2010 /
 
Én csak akkor olvasom az RCREG-et, ha nem volt vétel. Ez egy kódrészlet csak, egyetlen céllal, hogy a FERR-t detektáljuk egyszer, nem egy komplett lekezelés.
(#) robing16 válasza trudnai hozzászólására (») Okt 7, 2010 /
 
Nem az AD vagy a PORTD-vel van gond, hanem az usart-al. Csak azért említettem, mert akkor kipróbáltam az AD-t, működött és csak rajta maradt a 8db LED.

A LED-eket használtam fel más célra
(#) Muti válasza icserny hozzászólására (») Okt 7, 2010 /
 
Köszi a példát icserny, biztosan menni fog.

Ja és bocs a kód miatt ildi! Nagyon rohantam, és életemben először vagyok fórumon. Persze, nem 16F84-be akartam égetni a 628-ast, de más hibákat bizonyára elkövetek.
Kösz mégegyszer!
(#) Hp41C válasza watt hozzászólására (») Okt 7, 2010 /
 
Igen, értem. Ha véletlenül egyszer ráfutás (is) keletkezik, akkor a vevő nem vesz több adatot, annak törlése csak a vevő kikapcsolásával és ismételt bekapcsolásával lehetséges (Sajnos ez nem törli a PIR1.RCIF-et, még az RCREG -et is ki kell olvasni). Előfordulhat, hogy az elején keletkezik egy ráfutás, aztán hiába várja a keretezési hibát az ember...
(#) robing16 válasza Hp41C hozzászólására (») Okt 7, 2010 /
 
Hát, egyenlőre nem értem, hogy milyen ráfutásról van szó, vagy ez mikor keletkezik, mert a Dr. Kónya László "PIC Alkalmazástechnikás" könyvében túlzottan nem ír, hogyan kell használni ezt, vagy mik a buktatóik..

Annyit ír, hogy az INTCON, PIR1, RCSTA, SPBRG és TRISC-t állítsuk be, és hogy az RCREG és TXREG az adott adatbitek, amikkel lehet játszani, ésígytovább...

Nos, elképzeléseim szerint az inicializálást akkor kézzel dobnám össze, így az INTCON regiszternek adok 192-es értéket... 6-7BIT "1" szint, így a megszakítás letudva.

SPBRG-t 3-ra állítom, 250Kbaud értéknek megfelelően 16MHz-es órajellel. Utánna TRISC RX lába bemenet...

Az RCSTA regiszternek "1" a 7-4 BIT 1-re állítása

  1. INTCON := 192;
  2. SPBRG := 3;
  3. TRISC := 64;
  4. RCSTA := 144;


És így van valami, amit kihagytam, vagy rosszul csináltam?
Am, közben nézegettem a kódot, és az OVERRUN Error regiszter azaz a ráfutási hiba?
(#) watt válasza Hp41C hozzászólására (») Okt 7, 2010 /
 
Ja igen, erre nem gondoltam, jogos!
(#) Hp41C válasza robing16 hozzászólására (») Okt 8, 2010 /
 
Szia!

Az alábbi sorrendet kellene követni:
- Tris bitek beállítása,
- Baud rate beállítása,
- Vevő beállítása, a végén SPEN, CREN beállítása,
- Adó beállítása, ha kell,
- Megszakítás engedélyezése (PIE1.RCIE), ha kell...
- Periféria és globális megszakítás engedélyezése (INTCON.PEIE, INTCON.GIE ), he kell.

A PIR.RCIF bit akkor is jelez, ha a megszakítás tiltva van. Ha nem megszakításos a kiszolgálás, akkor nem kell engedélyezni sem a PIE1 -ben sem az INTCON -ban. Amennyiben engedélyezed, akkor a megszakítási rutint is meg kell írni, és abban kell törölni a PIR1.RCIF -et az RCREG kiolvasásával.
(#) robing16 válasza Hp41C hozzászólására (») Okt 8, 2010 /
 
Jujj, ezt így teljesen értem, mindjárt ki is próbálom, köszönöm a segítséged.
(#) cassis hozzászólása Okt 8, 2010 /
 
Parallel Master Port (PMP) -t szeretnék használni PIC18F67J50 -el. Sajnos valahogy nem sikerült a valóságban igazolni az adatlapban szereplő elméletet.
Csupán azt szerettem volna első körben megvalósítani, hogy a bus -ra írás megvalósuljon. De sajnos minden pin (PMA 8 - 13, PMD 0- 7, PMCS1, PMCS2, PMWR, stb.) logikai 0 ban marad.
Az adatlap szerint az írás akkor valósul meg, ha a PMDIN1L regiszterbe írok egy byte -t. Én ezt subrutinba helyeztem az egyszerűbb bus aktivitás detektálása érdekében.
szerintetek milyért nem működik a program?
Csatolva a kód-- vicsys

kod.txt
    
(#) cassis válasza cassis hozzászólására (») Okt 8, 2010 /
 
most látom kicsit bonyolult lett a kód a sok komment miatt.
Küldeném ismét, nélkülük.

Csatolva a kód-- vicsys

kod.txt
    
(#) chriskross hozzászólása Okt 8, 2010 /
 
PDIP tokozásnál mit jelent az I/P, E/P és az I/PTSL?
Csak mert 16F88-E/P-s PIC 250Ft-tal drágább, mint az I/P-s és gugli sem dobott ki semmi értelmeset és adatlap se ír róla semmit.
(#) icserny válasza chriskross hozzászólására (») Okt 8, 2010 /
 
Az adatlap nem mondta?
Idézet:
„Temperature Range:
I = -40°C to +85°C (Industrial)
E = -40°C to +125°C (Extended)

Package:
ML = Quad Flat No Leads (QFN)
P = Plastic DIP
SL = 16-lead Small Outline (3.90 mm)
ST = Thin Shrink Small Outline (4.4 mm)”
(#) El_Pinyo válasza chriskross hozzászólására (») Okt 8, 2010 /
 
Szép lenne, ha az adatlap sem írna róla semmit, maximum nem jó helyen kerested.
Az E az extended, míg az I az industrial szavak rövidítése és a működési hőmérséklet tartományokra utal. Adatlap vége Product Identification System fejezet alatt található meg.
(#) chriskross válasza icserny hozzászólására (») Okt 8, 2010 /
 
Köszi, így már én is megtaláltam I/P és E/P-re kerestem rá és hát értelemszerűen arra nem dobott ki semmit. Köszönöm az infot!
(#) trudnai válasza cassis hozzászólására (») Okt 8, 2010 /
 
Egy program nem a kommentek miatt lesz bonyolult. A kommentek csak segitik az eligazodast a kodban -- mar felteve, hogy a komment koveti a kodot es nem felrevezet. Szoval en nem javasolnam azok kivetelet...
(#) cassis válasza trudnai hozzászólására (») Okt 8, 2010 /
 
vicsys megoldotta a problémámat, a kódot mellékletként .txt ben csatolta. Hogy erre nem gondoltam
Így már a komment elfér egy sorban a programmmal.
No de vissza az alapkérdéshez valaki tudna segíteni ebben a fránya Párhuzamos Port élesztésben?
(#) zoox hozzászólása Okt 8, 2010 /
 
Sziasztok!
Kellene 1 kis help.16F690 PORTA összes portját I/O portnak akarom használni de valamiért nem megy.Milyen regiszter nem configoltam? TRISA ANSEL ASELH és ha jól néztem kb ennyi ja a proci _INTOSC modban van (itt lehet valami amit benézek csak nem tudom hogy mi) RA4/AN3/T1G/OSC2/CLKOUT RA5/T1CKI/OSC1/CLKIN
(#) szaffo555 hozzászólása Okt 9, 2010 /
 
Milyért lehet az, hogy a BTG utasítás a PORTC esetén működik, PORTD esetén már nem (18F87JXX). A D port X. bitjét csak a LATD utasítással tudom módosítani.
Szimulátorral tökéletesn megy BTG vel is.
Milyért?
(#) szaffo555 válasza szaffo555 hozzászólására (») Okt 9, 2010 /
 
hadd pontosítsak előző kérdésemen mielőtt megszóltok:
A D port X. bitjét csak a LATD utasítással tudom módosítani.
helyesebben:
A D port X. bitjét csak a LATD regiszteren keresztül tudom módosítani a BTG utasítással, PORTD resgiszteren keresztül meg nem.
Szóval akkor milyért van ez?
(#) watt válasza szaffo555 hozzászólására (») Okt 9, 2010 / 1
 
A 18F-eknék a kimeneti szintet a LATx regiszterek határozzák meg egyértelműen. A bemeneti szinteket pedig a PORTx regiszterekből olvassuk ki. Tehát ez nem hiba, ez ilyen. Persze a PORTx-re is írhatsz, de akkor nem garantált, hogy az jelenik meg amit akarsz. A PORTC helyett is LATC-t írj inkább minden bit és bájt műveletnél, ha kimenetet akarsz állítani!
Következő: »»   812 / 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