Fórum témák
» Több friss téma |
Igen mert kiolvasom az RCREGET. De most minden flag-et trölök tmr0,tmr1,tmr2,rb4-7, rb0, az egész pir1-et. De mindig beragad a megszakításba.
És ezt akkor csinálja, ha a Pickit2-ben nyomom az adatokat mint az őrült. Ha 2-3 byte-ot küldök kisebb eséllyel és később fagy be. Az se érdekel most hogy jó a vétel vagy sem. De ne ragadjon már bele a megszakításba!!!
Idézet: „- Kötelező kiolvasni az RCSTA -t, minden adat kiolvasása előtt egyszer. A teszteket egy másolaton kell végezni. El kell dönteni, hogy van-e ráfutási vagy keretezési hiba.” Az alábbi kód már évek óta jól működik nekem....
Üdv!
FERR,OERR bit csak olvasható,nem tudod törölni.
Szia!
Egy az egyben lemásoltam a programod! A problémám biztosan banális! Mert most is ugyanúgy kifagy.
A PIR1 RCIF és TXIF bitjei is csak olvashatók. Törlésük az RCREG kiolvasásával illetve a TXREG írásával lehetséges.
Akkor a felprogramozás lehet rossz. Előbb Baud generátort kell beállítani, aztán a formátumot. Külön művelettel engedélyezni a vevőt / adót. Ez után kell a megszakításukat elgedélyezni. A beragadásnak más oka is lehet. Egy másik egység kér megszakítást, amit a kiszolgáló nem kezel le, így kilépés után egyből a kiszolgáló fut le. Mindaddig így fog működni, amíg a kiszolgáló program nem törli a megszakítás okát.
Szimulátorban futtatva meg tudod állapítani, hogy melyik egység kéri a megszakítást. Az UART vétele egy register injection stimulussal szimulálható. Idézet: „Egy az egyben lemásoltam a programod!” A sok saját szimbólumommal hogyan küzdött meg a fordító? A hozzászólás módosítva: Feb 5, 2013
Nincsen más megszakítás beállítva. A kód pedig így jön sorban.
Megnéztem a TMR0 és a TXIF flag-je 1. Ezeket törlöm a megszakításban, akkor is kifagy. Tényleg fogalmam sincsen mi lehet ez. Lehet hogy rossz a pic?
Kipróbáltam egy másikkal ugyanaz A hozzászólás módosítva: Feb 5, 2013
Nagyon szépen köszönöm! Tudtam, hogy ez banális lesz, a probléma a TXIF volt! Mert én csak töröltem a flag-et, amit ugye nem lehet. Most hogy írom, nem fagy be. De azt is próbáltam , hogy kikapcsolom az adót, de akkor hülye adatokat vesz. Nem lehet kikapcsolva ha megy a vevő?
A hozzászólás módosítva: Feb 5, 2013
Elég, ha a IRE1 TXIE bitjét 0 -ra állítod, ha nincs mit adni.
A hozzászólás módosítva: Feb 5, 2013
Sziasztok!
Segítség kellene. Pic16f690-et szeretnék programozni, de valamiért sehogy se jön össze. WinPic 800-as progit használok, és Pro Pic-2-es programozót, párhuzamos portról megy, saját készítésű. A jelek megvannak, beállítgattam melyik legyen invetálva meg minden... de nem ismeri fel az ic-t, bár be is van állítva a tipus, égetéskor akkor is az első bájtra hibát jelez. kiolvasásra minden 3FFF-en van. Teljesen tanácstalan vagyok mit csinálok nem jól már 100 szor átnéztem minden a megfelelő lábra van-e kötve.
Úgy néz ki megoldódott, kivettem az íc-t az áramkörböl, és rövid vezetékkel kötöttem a programozóhoz. Így jó lett. Vagy a madzag volt hosszú vagy nem tetszett neki, hogy benne van az áramkörben.
Most már jó az abszolút probléma, de visszatérve c-re még mindig ottvan a megint érdekes jelenség. Már nem fagy be, de egyáltalán nem értem, hogy a kinti feldolgozás miért rontja el a vételt, vagy nemtudom micsinál de nem jó a kapott érték. Ellentétben ha kint csak ráírom binárisan egy portra akkor sosem rontja el a fogadott értéket. Ha viszont ugyanaz a 8 bit decimálisan van kiírva, akkor tök hülye. De ott is ha hosszabb időt hagyok a multiplexálás kapcsolgatására akkor megint az az érték jön amit küldök. Ennyire nem szívattam magam még a pic egyik moduljával sem, sokáig nem programoztam, ez meg is látszik.
Szerintem az lesz a baj, hogy a megszakítás nem ment rendesen? Mert ha binárisan kiírom akkor semmilyen Status bitet nem használok, ha decimálissá alakítom, akkor kell a Status, ezért írhat hamis értékeket. De ma már kérdeztem, de nem bizonyosodtam meg 100% ra. Hol van a visszatöltés a megszakításban?
Sziasztok!
Valaki ismeri a "Tanuljuk meg a C++ programozási nyelvet 24 óra alatt" c. könyvet? Ebből esetleg meg lehet tanulni a PIC programozást?
1. Nem
2. Ebben a topikban már számos szakirodalmat ajánlottunk PIC16-hoz, PIC18-hoz és PIC24-hez. Bővebben: Link
Azért ne keverjük össze a C és a C++ nyelvet egymással. A C++ a C nyelv kiegészítése az objektumorientált dolgokkal. Ezt nem nagyon használjuk mikrovezérlőkhöz, egyrészt a szűkös memória miatt, másrészt a hardverközeli programokhoz nem is annyira szükséges ez. Maradjunk meg a sima C-nél.
Sziasztok.
12F675 analog bemenetnél azt vettem észre hogy 0-tól 5 volt feszültségnél nem megy fel az érték 0-tól 1024-ig hanem csak kb. 550-ig. Az adatlapról már kipróbáltam mindent (?). Kínomban, (lesz ami lesz) megnöveltem az analog bemeneten a feszt egész 12 voltig és láss csodát nem ment tönkre a PIC hanem felfutott kb. 800-ig. Itt már kezdte növelni az 5 volt táp feszt is és nem mentem tovább. Találkozott már valaki ilyen jelenséggel, vagy mit hagytam ki az adatlapon. Ezekkel a beállításokkal a legjobb. Szimulátoron kitűnően működik. a valóságban már nem. AN 0 ANSEL: 00100001 ADCONO: 10000011 TRISIO: 00000001 CMCON: 00000111
Szia C-ül nem beszélek de olyan mintha az 5V-rol valami ellenállással csatlakoznál és igy már mint egy feszültségosztó jön létre és azért lehet hogy nem jön meg a teljes 5V-t.
Idézet: Az ilyen akciókat jó lenne mellőzni, mert tönkreteheted vele a mikrovezérlőt! Jó lenne, ha kapcsolást és teljes programot mutatnál, mert lehetséges. hogy:„Itt már kezdte növelni az 5 volt táp feszt is” - Túl nagy ellenálláson keresztül jut az analóg bemenetre a jel - Túl kevés idő marad az ADC mintavevő-tartó áramköre kondenzátorának feltöltésére. Egyszóval nem tartod be az adatlapi ajánlásokat.
A probléma biztosan nyelvtani. Egész éjszaka próbáltam minden megoldást, már semmi ötletem sem maradt és átírtam a dissasembly-jét asm-be. Úgy működik. Megpróbálom érthetően leírni. A probléma az, hogy amit veszek a vevővel. (most megszakításon kívül és minden hibakezelés nélkül, csak egy működik nem működik módon) ki szeretném íratni decimálisan. De rossz értéket ír ki! Na de a konverter jó mert ha direkt feltöltöm mondjuk 223-al akkor helyesan azt írja ki, aznonban a vevőm értékét binárisan írom ki akkor az is jó. Ezzel nemtudom kizárni így a hibát. És a tetejébe ugyanez a program listázott kódja beírva sima asm.be decimálisan is működik. Kiszedtem a táblázatot és csak az egyesek (num) értékét nézem, leegyszerűsítettem teljesen 1000 dolgot variáltam, de sehogy sem jó.
A hozzászólás módosítva: Feb 6, 2013
Szia!
A char num = 0; char numt =0; char numh = 0; sort tedd a for ciklusba az xxx = dat; el; vagy közvetlenül utána. Sem ez a programozott sem a kikommentezett megszakításos megoldás nem lesz jó. Ld. amit már készer leírtam...
Beletettem amit mondtál. -nem változott- Te most a vevő dolgára gondolsz, hogy nem lesz jó? De nekem a bajom hogy nem tudom decimálisan úgy ki írni hogy az is legyen mint ami tényleg benne van, ez binárisan kiírva pedig helyes. Ez a nagy problémám. Az a része jó amikor nem a táblát hívom csak a num regisztert vizsgálom, ha 0 akkor ha egy akkor .. ??
A hozzászólás módosítva: Feb 6, 2013
Nemtudom mennyire lehet érteni mi a bajom, de megpróbáltam úgy kommentezni, hogy világosabb legyen. Persze nem így írnám assemby-sen, csak már fogalmam sincs miért csak bináris értékekben jó..
szerk: Ja és nagyon fontos hogy a decimális alakító az jó mert ha fix értéket vagy egy ad mérés van előtte akkor ok. De arra vagyok kíváncsi hogy a vevő miért jó binárisan és akkor miért nem jó átalakítva. Ezt a logikátlanságot nem bírom felfogni! Mi a magyarázat? A hozzászólás módosítva: Feb 6, 2013
Én kipróbálnám, hogy mi van ha "unsigned char" változókat használsz.
Most kipróbáltam nemjó sajnos.
Akkor szerinted azért nemtudom átalakítani mert rossz a vételi program? Értelmeztem amit tegnap küldtél, nincsen benne az a mutató kezelő nemtudom mi. Csak egy egyszeri vételnek jó ez így?
Egyébként még most is ugyanaz a probléma, de lövésem sincsen, hogy mivel a baj, mert assembly-ben működik még akkor is jó ha csak kiolvasom és kész. De ez itt is jó, DE itt csak binárisan korrekt.
Szia!
Ha binárisan jó a kiírás a következő problémák jöhetnek elő: - Nem felel meg a hétszegmenses átkódoló táblázat a bekötésnek, polaritásnak , tűl gyors a 4 us -es váltás és elmosódnak a minták. Tegyél fel egy olvasható rajzot és az egész programot, amiből megállapítható, hogyan vannak bekötve a szegmensek. Állítsd be a MpLab szimulátorát és minden kipróbálható lépésenként. Az uart szimulálásához készíts egy regiszter injection stimulus (2). A hozzászólás módosítva: Feb 6, 2013
A programban felírtam melyik láb melyik szegmens. De 1us-al sem rossz minden mást normálisan átalakít! És rendesen kiír. Ha pl egy fix érttékkel töltöm fel vagy egy folyamatason növelt regiszer értékét is rendesen követi, az a/d értékét is helyesn írja ki! Csak az usart-ot nem! Ezért nincsen fogalmam se hogy miért nem!? Ha binárisan meg írom az usartot nem téved!
|
Bejelentkezés
Hirdetés |