Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szia!
Az adó (tx.c) azt csinálja, amit szeretnél. Mindaddig, amig valamelyik gomb le van nyomva, küldi a hozzá tartozó üzenetet (azonos toggle értékkel). Ha felengeded abbahagyja a küldést. Ha újra lenyomod valamelyiket, újrakezdi a küldést negált toggle értékkel. A vevőben a kiértékelés:
Ezt a részt kellene átalakítani és kiegészíteni egy időtúllépés figyeléssel.
Persze az offtimer változót deklarálni is kell...
Sziasztok.
Meg tudná valaki mondani, hogy lehet-e a portokat lábanként programozni? Olyasmire gondolok, hogy pl. a PORTA-ra kötök nyolc ledet, és úgy kapcsolom be őket, hogy valamelyik csak világít, és van amelyik villog. Vagy az egyész portot kell minden villogásnál állítani, hogy a statikusak bitjei maradnak, a villogók pedig változnak? Pascalban próbálok programozni, de ha asm-ben megoldható, az is jó.
Ha ragaszkodsz a Pascal-hoz, akkor fel kell lapozni a kézikönyvét. Ilyen példákat látok benne:
Természetesen bitenkénti műveletekkel és megfelelően választott maszkokkal bájtszélességű műveletekkel is megoldható a dolog...
Köszönöm, pont ez volt amit kerestem. Elég vaskos ez a könyv, és ha az ember nem tudja mit keressen, akkor nehéz. Hamarosan átrágom magam az egészen.
Köszönöm, holnap majd próbálkozok! (Meg én is nekifekszek a szakirodalomnak, mint Poostmaster kolléga )
Hát ez milyért van?
org 50 movlw h'aa' movwf portd,0 A fentiekre ezt írja ki fordítási hibaként az MPLAB: Symbol not previously defined (portd) A PIC16 -os sorozatnál nem tapasztaltam ilyen jellegű problémát. Vagy én nézek el valamit?
Ha jól látom csak átfordítottad nagybetűsre.
Az pedig elvileg nem számít.
És ha a címre írnál közvetlenül? Biztos le van írva a Datasheet-be.
mennyire igazad van!
Eddig mindig nagybetűvel írtam, de most aztgondoltam áttérek kicsire. Az utasításokat így is elfogadta, de úgylátszik a regiszter megnevezéseket már nem. Egyébként kipróbáltam címre tudtam írni.
Az MPLAB Project/Build Options/project menüben az opciók között van olyan beállítási lehetőség (az MPASM assembler fülön), hogy Disable case sensitivity. Ettől függ, hogy számít-e a kis/nagybetű különbsége.
Sziasztok!
Az lenne a kérdésem,hogy hogyan lehetne PIC-el összehozni egy olyan áramkört aminek a bemenete 0 ról 24 voltra változna (és így is maradna egy bizonyos ideig) aminek hatására a kimenet 4 szer vagy 5 ször megvezérelne egy tranzisztort, amivel egy csipogót működtetnék.(Kb fél másodperces időközök a csipogások között) Ha a bemenet újból 0 ról 24 re vált a folyamat újból lejátszódna. Egy buszba kellene leszállásjelző visszajelzőként a sofőrnek.A bemeneti jelet a műszerfalon lévő visszajelzőről vennénk. Sajna nem értek a progizáshoz ezért kérném a segítségeteket. Előre is köszi!
ha nem ismered a programozást nehéz lesz összehozni.
A feladat egyszerűségéből adódóan szerintem praktikusabb lenne időzítőben gondolkodni pl. 555 ben.
Egy szazforintos PIC megoldja. Ossze lehet persze legozni idozitobol meg szamlalokbol, de sokkal bonyolultabb lesz. Szerintem egy kicsit okosabb muszeresztanulo zsebpenzert megcsinalja.
Az 555 ös időzítős megoldásra én is gondoltam,a csipogó meghajtása pedig 4017 el történt volna , de itt jópáran csodákat művelnek a PIC el gondoltam hátha van megoldás,mert jóval egyszerűbb,kevesebb alkatrész stb.
Igazad van ilyen feladatokkal lehet elkezdeni PIC el foglakozni. De szerintem inverteres schmitt triggerekből kialakított oszcillátor egy rövidebb (a sípolásra) és hosszabb időzítő (a sípolási időre) logikai össze ÉS -vel egyszerű és minden igényt kielégít. De ugye így már messze járunk a PIC től.
Csatoltam. A következő találkozón jössz egy sörrel.
Vicsys leköteleztél! Nagyon szépen köszönöm!
Már nekiláttam az időzítős logikai kapus megoldáson törpölni. Ha eljutok a találkozóra fizetem a sört!!
Sziasztok!
Most szeretnék átstartolni a PIC16F sorozat után a 18F típusokra. Azonban ellentmondásos nekem a memóriatérkép. Tanulmányoztam icserny által készített és nagyon hasznos weblapot, de még ebből sem világos a dolog. amit eddig értek: Alapvetően van 16 bank. Bankot váltani a BSR<3:0> val lehet. Eddig ok. Az Access bank címtartománya 0x00-0x5F és 0xF60-0xFFF között van. Ami ide van címezve alapértelmezés szerint megkapja az a=0 (ACCESS) értéket. Ami pedig nem, annak a 12 bites címéből lemarad a felső 4 bit, így a BSR -t kell használnunk, ha jó helyre akarjuk őket tenni. Úgy tudom, hogy az ACCESS bank arra jó, hogy nem kell a regisztereket bankba szervezni, közvetlenül címezhetőek. Az SFR regiszterek 0xF40 - 0xFFF között vannak. Tehát vannak olyan regiszterek (0xF40 - 0xF60), amelyeket csak a 15. bankban címezve lehet elérni? Másik kérdés, hogy milyen regiszterek vannak a bank0 -ból 0x00 - 0x5F között az access bankba leképezve? a fentiekbő adódóan ez hibás programrészlet?
Ha valakinek van kedve megvilágítani hogy is van ez szívesen venném!
Szia!
Az ACCESS bank minden bank kiválasztás melett közvetlenül elérhető memória tartomány, hagyományos utasítás módban a 0. bank 0x00- 0x7F általános célú és a 15. bank 0x80 - 0xFF FSR regisztrereit lehet elérni. Az utasításoknál érdemesebb a hivatkozást a következő módon írni:
Példának a megszakítás rutin regiszter mentését lehetne felhozni: A WREG tartalmát el kell menteni, de a BSR tartalma nem ismert. A WREG tartalmát a ACCESS ram-ban foglalt rekeszbe mentjük (a BSR értéke mindegy)... A funkció hasonlít a 16F típusok közös memóriaterületéhez (0x70..0x7F) - már amelyikben van ilyen terület... A bankok kezelésében teljesen igazad van. A memóriacím felső négy bitjét (általában) a BSR regiszter 3..0 bitjei adják. A movff azonban a teljes 12 bites címet kezeli - segítségével bankok között (is) lehet adatot mozgatni. A nagyobb kontrollerben sokkal több FSR van, így ezek egy része nem fér bele a ACCESS bank felső felébe, ezek csak a 15. bank kiválasztásával érhetők el direkten, vagy a movff utasítással. Indirekt címzésnél a teljes 12 bites cím az FSRxH:FSRxL regiszterpárban van. A felhozott példád működik, de szebb lenne a
fomában.
Hali!
Írtam egy kis programocskát, csak úgy gyakorlás képpen a próbapanelomra. A nyolc ledből az utólsó villogva jelzi a másodpercek múlását, és minden percben kigyullad egy a másik végéről kezdve. 5 perc után nullázódik. Amire magyarázatot szeretnék, az az, hogy a várakozásra használt delay_ms() függvényhez miért 250-es értéket kellett megadnom, hogy a másodpercem meglegyen egy világos-sötét ciklus alatt? nem 1000 egy másodperc?
1. Az ACCESS BANK alsó része RAM terület (Bank 0 eleje). Ide célszerű tenni a leggyakrabban használt változókat.
2. Az nem minden PIC18F típusra igaz, hogy 0x5F-ig RAM az ACCESS BANK! Például a PIC18F4520-nál 0x7F a határvonal (tehát az Access terület fele RAM, fele SFR). A PIC18F14K50-re azonban tényleg az van, amit írtál... Idézet: Mikrovezérlője válogatja. Konkrétan a PIC18F14K50-nél ez a helyzet, a PIC18F!550-nél viszont nem, mert annak kevesebb és kevésbé szétszórt regisztere van.„Tehát vannak olyan regiszterek (0xF40 - 0xF60), amelyeket csak a 15. bankban címezve lehet elérni?” Az ACCESS BANK használata természetesen nem kötelező, tehát ugyanaz a regiszter többféleképpen is megcímezhető/elérhető.
Milyen panel? Miben programozol?
A parancsból ítélve mikroC. Szerintem nem megfelelő órajel van beállítva a programban. Ahhoz hogy a delay_ms() függvény pontos legyen, ahhoz szüksége van a fejlesztő környezetnek a pontos órajelre.
köszönöm mindkettőtök válaszát.
Mégy egy kicsit világosítsatok rajtam légyszíves! 1. Idézet: „Az ACCESS BANK használata természetesen nem kötelező, tehát ugyanaz a regiszter többféleképpen is megcímezhető/elérhető.” Az access bankben értem, elérhető közvetlenül. De pl. a TRISC hogyan lenne érhető bankolt területen BSR segítségével? A memóriatérkép szerint a TRISC már a 16. bankban lenne, ha lenne ilyen, mert ennek címe 0xF94 és a 15. bank befejeződik 0xF5F nél. Valószínűleg ezért nem világos Hp41C válasza sem, aki azt írja helyes a kód, és a bank 15 ben megtalálja TRISC -t. A következőt kipróbáltam, ez látszólag működik is, hogy a PMMODEL -t (ami a 0xF48 on van, tehát a bank 15 ben ) így címeztem:
Engem az zavar még nagyon, hogy a bank 15. be belenyúló SFR - eket milyért nem egyértelműen BSR -el kell camezni, míg az access bankba leképzetteket meg access al? Szóval hogy is van ez,
A 44-pin-es demo kártyára. 887-es van rajta. Nem C, hanem Pascal. amikor a PIC-et kiválasztottam, alapból a 8 MHz-et állította.
A funkció regiszterekhez sem kell bankolni, bárhol elérhetőek.
Szia!
Mottó: Egy informatikus számolja a gyerekeit: Nulla, egy, kettő... Te jó Isten, hol a harmadik gyerekem !?!? Hát ez az örök probléma: Idézet: „Valószínűleg ezért nem világos Hp41C válasza sem, aki azt írja helyes a kód, és a bank 15 ben megtalálja TRISC -t.” A memóriában az első Bank címe 0, az utolsó Bank címe 15. Az adatlapokban Bank0 ... Bank15 -öt emlegetnek. A TRISA (0xF92), TRISC(0xF94) -vel is kipróbáltam 18F4620 -on... Működik!
Épen arról beszélünk, hogy egy FSR, aminek a címe 0xF48 csak a 15. lapról érhető el...
A 18F2580 ban az FSR terület a 0xD60 .. 0xFFF közötti címeken van. A 0xD60 .. 0xDFF a 13. Bank (BSR = 0x0D), az 0xE00 .. 0xEFF a 14. Bank ((BSR = 0x0E), a 0xF00 .. 0xF7F a 15. Bank (BSR = 0x0F) mellett érhető el direkt címzéssel...
|
Bejelentkezés
Hirdetés |