Fórum témák
» Több friss téma |
Továbbá:
- Ha egy módosítható (Peripheral Pin Select) lábat kétirányú funkcióra (pl. I2C vonalnak) használunk fel, mind a kimeneti mind a bemeneti beállítást el kell végezni (a digitálissá állításon kívül). Egy egész litániát írtunk, de csak ennyi maradt a sárga mezőben.
Kijavítottam erre :
Mellékeltem egy képet a kimenetről. Megduplázza a választ.
Akkor az rx és tx lábat be és kimenetre kell állítanom ? Így?
A hozzászólás módosítva: Jún 5, 2019
Típustól függ a beállítás. ld. Adatlap (E)USART fejezet.
18F252: TRISC7 = 1; TRISC6 = 0; 18F2550:TRISC7 = 1; TRISC6 = 1;
Ez egy 16f628A , megnéztem az adatlapját, de én nem találom benne.
Adatlap TX9: 9-bit Transmit Enable bit van , de hogy kimenet vagy bemenetre hogyan állítom , nem látom. Jah , de : Idézet: „1.TRISB<1> and TRISB<2> should both be set to‘1’ to configure the RB1/RX/DT and RB2/TX/CKpins as inputs. Output drive, when required, iscontrolled by the peripheral circuitry” Ezek szerint akkor a tx kimenet és rx bemenetre van állítva. A hozzászólás módosítva: Jún 5, 2019
Na most kinulláztam a tömb összes elemét :
De változatlan a helyzet. A hozzászólás módosítva: Jún 5, 2019
8 bitről váltáskor szerintem az esetek többségében mindenki így van.
A 16 és 32 bites PIC-ek doksijában sosincs részletekbe bele menő leírás a reference manual ban találsz mindig részletesebb leírást adott esetben example-t. Viszont ha nézted az UART-os reference manual-t egy szó sincs erről benne, mivel ez nem az UART része hanem a PPS-é (IO). Section 12. I/O Ports with Peripheral Pin Select (PPS) doksiban található egy ilyen szekciót: Idézet: „ When a remappable peripheral is active on a given I/O pin, it takes priority over all other digital I/O and digital communication peripherals associated with the pin. Priority is given regardless of the type of peripheral that is mapped.Remappable peripherals never take priority over any analog functions associated with the pin.” Érdemes (teljes,projet) example-t keresni rengeteg ilyen időhúzó dolgot elkerülhetsz. A másik lehetőség MCC-vel vagy Harmony-val (32 bit) generáltatni egy kódot és megnézni az initet sokat segíthet. A hozzászólás módosítva: Jún 5, 2019
Sziasztok!
Egy 18F4431-nél elakadtam ott, hogy 2 ADC csatornát akarok beolvasni, de sehogy se sikerül. Beállítom a Multi-Channel Mode bit ACSCH 1-re. Minden más alapon. Az ADCON1 0-1 bitjét próbálom állítgatni, de sehogy se jövök rá, hogy lehet a 2 csatorna értékeit 2 külön változóba beírni. Csak 1 csatorna olvasása működik, de multi channel már nem. Az Adatlapba se tudok elmenni, hogy mikor és hogy lehet kiolvasni. A BFEMT bitet kéne figyelni? ADCON0bits.ADON = 1; //ADC ENEABLE Delay10TCYx(3); //WAIT 3uSEC ADCON0bits.GODONE = 1; //ADC START while(ADCON0bits.GODONE); //WAITING FOR ADC FINISHED ADCON0bits.ADON = 0; ADCON1bits.ADPNT0=0; ADCON1bits.ADPNT1=0; ADC_ACT=ADRESH; ADC_ACT<<=8; ADC_ACT+=ADRESL; Így mindig a 2. csatorna értékeit írja bele a változóba. Nem tudom, hogy lehetne lépkedni a kettő között.
És az I2C-vel ezt nem is teheted meg mindig 8 biten PPS-el van felette még nem láttam olyat ami I2C-re PPS-el lenne maximum átváltható egy másik kijelölt alternatív lábra
A hozzászólás módosítva: Jún 5, 2019
Közbe megtaláltam a hibát a Buffer nem volt engedélyezve.
Kiragadtad a lényeget....
16 és 32 bites kontrollereken is be kell állítani ilyen esetben a lábat bemenetnek is és kimenetnek is. Ezenkívül megjelent, kapható a 8 bites 18F2xK42, 18F4xK42, amiken az adatlap (DS40001869C-page 265) szerint a két I2C modul vonalai átkonfigurálható (remappable) lábakon vannak.
Az strstr függvény visszatérési értéke egy char típusú mutató, nem a mutatott érték, vagy NULL pointer, ha nincs egyezőség. Ezt teszed if-be. Ring buffer-es feladat, ahogy már írták is.
Nem értem miért kell ring buffer ehhez.
Én nem fogadok és küldök egyszerre. Küldök és várom az adatot , majd ha kaptam vissza választ küldök tovább, de egyszerre nem fogadok és küldök. ( Nem mondom hogy nem lenne szebb és gyorsabb és jobb, de nekem nincs meg még a tudásom hozzá, hogy azt megcsináljam.) Csináltam egy ilyet :
De nem fordul le. Beolvasom a kapott karaktereket szépen sorban , 0 ás , 1 es és 2 es helyre a puffer tömbbe. Majd karakterenként vizsgálom , hogy a várt karakterek benne vannak e az adott 0 - 1- 2 helyen. Ha benne vannak, akkor mehet a be és kikapcs szöveg vissza válaszként és ürítem ezeket a helyeket a következő on és off parancs számára. Idézet: hibákat kapok a fordításkor.„Pointer requed és Operator '' is not applicable to these operands ''” Mit rontok el? A hozzászólás módosítva: Jún 5, 2019
Sziasztok!
A múltkori i2c-kérdésem tárgyát képező kódot csatolom. Hátha találtok benne valami kivetnivalót. Légyszi nézzétek meg. Köszi:L.
Megpróbálom megcsinálni ring bufferben. Proteusban szimulálva tökéletes. Élesben viszont 1x 2x jön vissza válasz és utána rossz lesz.
Szerintetek?
A hozzászólás módosítva: Jún 5, 2019
Elnézést, már nem tudtam törölni, badarság az első mondat. Rosszul paramétereztem a printf-et a CodeBloks-ban.
Sziasztok!
Az meg lehet csinálni, hogy van egy változóm 0-127 között és ki szeretném íratni printf-el LCD-re mégpedig úgy, hogy az egyes helyi érték előtt legyen egy pont is? Az a változó lényegében pont a 10 szeresét tartalmazza a nekem kellő értéknek egy tizedespont pontossággal, csak az a fránya pontot kellene beszúrni valamilyen egyszerű módszerrel.
Igen!
Milyen program nyelven? A hozzászólás módosítva: Jún 6, 2019
C, de a változóm unsigned char és a picet sem akarok terhelgetni, ha bonyolult.
De melyik C?
Mert pl CCS-C-ben valahogy így nézne ki: printf(lcd_putc,"TEMP: %3.1f ", temperature); Kőbaltás megoldás: osztod tízzel, printf - eredmény, pont, maradék
Ajjaj
Eléggé furin vannak az elnevezések.Ha az I2C2-t használod,akkor mindnek legyen az a nevében,mert így könnyen belemész abba,hogy a másik I2C-nek írsz be valamit .Pl: 129. ,147. sor. Ja,és csak while-ket annyira nem jó használni,mert megakadhat a progi,dobj mellé timert,WD-t. A hozzászólás módosítva: Jún 6, 2019
C18 fordító.
A változóm unsigned char típus esetleg lehet unsigned int, de jobb lenne ha 8 bitnél nem lenne nagyobb. Nem tudom a fordító hogy kezelné le. Osztom tízzel unsigned charból nem lesz maradék.
C18-at nem ismerem ... nincs maradékos osztás művelete?
Esetleg osztod 10-el, majd az eredményt szorzod tízzel és a kivonod az eredeti értékből!
Így mindig ki fog maradni 1 válasz. Talán ez segít
Ehhez szét kéne bontanom a számot tehát 0-127 között van egy unsigned char típusú változóm.
Én azt szeretném, hogy így nézzen ki: 0.0-12.7. A szétbontáson gondolkodok melyik a jobb a picnek ha elosztom 10-el és kivonom az eredetiből megkapva a maradékot, pár sor talán nem olyan vészes, vagy floatként kezdem kezelni, típuskényszerítéssel nem tudom működik e és ha igen akkor a fordító mire fordítja. Megpróbálom megnézni mindkét megoldást, bár az első lehet gyorsabb és egyszerűbb.
Szia!
Karakterenként írd ki! Szazas = valtozo/100; Tizes = (valtozo - 100*Szazas)/10; Egyes = valtozo%10; Ezeket egyesével kiírva, megfelelő helyen közéjük a pont ( ASCII kódhoz kell hozzá még 0x30!)! De kiírathatod a százast és a tízest egyszerre: SzT= valtozo/10; <-- ezt Printf-el ! A többi ugyanúgy! A hozzászólás módosítva: Jún 6, 2019
Köszi , az a helyzet, hogy így pedig minden 3. küldött adatra válaszol csak. Ez mitől lehet?
Mellékeltem egy képet. megj. A váltózók így vannak beállítva :
A hozzászólás módosítva: Jún 6, 2019
Közben töröltem, mert rosszul értelmeztem, amit írtál !
|
Bejelentkezés
Hirdetés |