Fórum témák
» Több friss téma |
MSP430G2553 mikrovezérlő 010FFh to 01000h címen levő tartalmát, ami katalógus szerint "Information memory", azt I2C buszon keresztül lehet változtatni?
A 010FFh to 01000h címeken nem a kalibrációs adatok vannak?
Valami hasonló, beállítás, pontosan nem tudom
Ha az emlékeim nem csalnak, akkor a DCO, ADC beállításai vannak ott (Flash memória SegmentA).
Hogy szeretnéd i2c-n keresztül állítani?
Valamiért valószínűleg átíródnak az adatok ezen a helyen, legalábbis nem egyforma, és feltételezzük hogy esetleg az okozza a hibát, csak I2C van kivezetve ahol kommunikál a fő kontrollerrel, ez a rész nem olyan mintha EEPROM ként lehetne használni?
A hozzászólás módosítva: Jan 24, 2022
Az USCI regiszterek a 8 bites perifériához tartoznak (0xff to 0x10), neked meg a 16 bites perifériában van a problémád.
A hozzászólás módosítva: Jan 24, 2022
Idézet: „ez a rész nem olyan mintha EEPROM ként lehetne használni?” De igen, Flash memória, A,B,C,D segment. Egy-két programomban rendszeresen használom a flasht, de még soha nem volt vele olyan problémám, hogy "átíródtak, vagy elvesztek" volna az adatok. Ráadásol nem is olyan egyszerű a flasht írni.
Tehát az itt levő adatok olvasásához és irásához i2c porton keresztül lehetséges? Igen vagy nem?
Ezért írtam, hogy szerintem az I2C vonalon nem tudod írni a Flasht.
Az alábbi kis program szösszenettel a CPU újraindulást számolom WDT segítséggel.
Közvetlenül nem, de ha meg van benne írva a program akkor csak lehet az általad mutatott függvényekkel. Egy kész termékről van szó, nem saját fejlesztés.
Sziasztok
Letöltöttem a Code Composer Studio v.7.4.0.00015 (mert ingyenes), de a beépített editorral van egy kis problémám. Az ALTgr+ xy billentyűkobinációk 90%-a nem működik benne. Pl. {,^... karaktereket nem tudok írni. Más programokban, pl. IAR, Enegia IDE, minden bill. jó. Be lehet állítani valahol a bill.kiosztást?
Szia!
Ha jól tudom, a CCS Eclipse alapú. Ha beállítás jellegű dolgod van vele, akkor az "eclipse" lesz az a keresőszó, amire érdemes ráguglizni. Amúgy: Windows/Preferences/General/Keys. Itt látod, hogy a különböző billentyűkombinációk mikhez vannak hozzárendelve. Sajnos a magyar billentyűkiosztás más, mint az angol és így a magyar kombinációk foglaltak különböző egyéb feladatokra. Ezeket meg kell szüntetni. A keresőbe be kell írni a kívánt kombinációt (AltGr helyett ctrl+alt-t kell írni), rányomni a találatra és az Unbind Command gombra nyomni. Ekkor felszabadulnak a kombinációk.
Köszönöm a segítséget.
Megnéztem az Eclipse-ben és ott sem mentek az AltGr kombinációk. A CCS-ban a bill kombinációknál megtaláltam a "bűnös" beállításokat. Mivel nem nagyon használom a bill. kombinációkat töröltem a számomra fontos karakterek kombinációját. A lényeg, hogy most minden jó lett.
Sziasztok
SPI-n szeretnék meghajtani 4 vagy 6db 7 szegmenses kijelzőt shift regiszterek segítségével (74hc595) amivel nincs is semmi gondom. A problémám és a kérdésem az lenne, hogy ha csak egy digit x szegmensét szeretném megváltoztatni, akkor mindenképp az összes digitet újra kell írni? Pl. Ha egy 4 digites órát nézünk és a 3. digit DP szegmensét szeretném villogtatni másodpercenként, akkor mind a 4 digitet másodpercenkét úra kell írni? Mind a 4 digitnek külön meghajtása van, tehát 4 db 74hc595.
Ha láncolva vannak a regiszterek, akkor igen. Ehhez egyszerűen fenn kell tartani négy bájot. Amelyiket akarod, megváltoztatod, majd kiküldöd SPI-n az adatokat.
Ha csak három bájtot küldesz ki, akkor a negyedik regiszterbe az előző négyes csomag utolsó bájtja fog kerülni, mert a "tárolás" lábra adott impulzus a léptetőregiszter kimeneteit másolja át egy tárolóregiszterbe, de nem törli a léptetőregiszter tartalmát. Ha <óra tíz> - <óra egy> – <perc tíz> - <perc egy> sorrenben vannak felfűze az IC-k, akkor három bájt kiküldése esetén a "perc egy" helyiértékre az előző adatcsomag "óra tíz" értéke fog kerülni. szerk.: A 74HCT595-ös adatlap szerint hajtható akár 57 MHz-es órajellel is, magyarán rövid idő alatt el lehet intézni az írást. A hozzászólás módosítva: Nov 22, 2022
Láncba vannak kötve. Így egyszerűbb a CA kijelzőket kezelni.
Sziasztok.
Több problémám is akadt a Ti USCI I2C Master programjával. Az első és legnagyobb probléma, hogy nálam nem működik. Apró módosítások után sikerült működésre bírnom, de érdekelne, hogy miért nem megy az eredeti program. Tehát az slaa382 DMA támogatás nélküli I2C vezérlő program adatküldés része nem megy:
A fenti részben beállítjuk a hardveres I2C-t küldésre. A UCB0CTL1-ben beállítjuk az órajelet és a SW rezetet engedélyezzük.
Az adat küldésnél az UCB0CTL1 -ben beállítjuk, hogy adat küldés lesz és kiadjuk a START parancsot ami újra kiküldi a slave címet. Ha indítottam egy küldést a program lefutott és nem csinált semmit, illetve kiküldte a slave címet de adatot már nem küldött. A CCS-ben megnéztem a regisztereket és a TI_USCI_I2C_transmit-ban történő beállításokat amiket az UCB0CTL1 ben kellen vérgehajtani, nem hajtotta végre. A UCTR és UCTXSTT regiszter 0 maradt. Csak akkor hajlandó a program az adtatküldésre, ha a transmitinit részben engedélyezem ezt a két regisztert. De miért? Nálam lehet a hiba? A másik dolog amit nem értek az I2C busz ellenöző részben van:
Nem értem, hogy ezt miért így írták meg, hisz itt a while ciklusból soha nem lép tovább a program. Vagy én értek valami félre?
Sziasztok.
MAX6957 -el akadt egy kis problémám. Az adatlap szerint ha több IC kötünk kaszkádba és pl. a mádosik IC-nek szeretnénk adatot küldeni akkor az első IC-nek csak egy No-Op parancsot kell küldeni. Ezzel talán még nem is lenne bajom. Az igazi probléma már az IC-k beállításánál jelentkezik, ugyanis valamiért nem "egyszerre" kapják meg az adatokat. Szintén az adatlap szerint 15 óraütés után kellen megkaja a második IC az adatot, de ez sem stimmel (csatolt kép). Valamit én értek félre az adatlapban? Bárhogy próbálok adatokat köldeni, a kijelzőn össze-vissza jelenik meg az infó. Néztem a MAX7219 beállításait, mert nem sokban különböznek, de azzal sem lettem okosabb.
Ha csak egy IC-t vezérelsz, akkor működik az az egy úgy ahogy kell?
Igen működik.
Bár én csak 7 szegmenses kijezőket hajtok vele, nem 14-16-ost, de ez a lényegen nem változtat. Azt elfelejtettem írni, hogy az adatlap szerint vannak bekötve az ic-k. Tehát a CS az SCLK adatvonal mindkettőnél ugyan az.
Egy IC két bájtot kér, két IC négyet. Elöször azokat a bájtokat kell küldened, amelyeket a láncban a másodiknak szánsz. Ha csak a második IC-ben akarsz változást, akkor kiküldöd az annak szánt bájtokat, majd kétszer a 0x00 bájtot. Nem tudom ellenőrizni, de az adatlapból úgy látom, a CS vonalnak folyamatosan (amíg a négy bájt ki nem szalad a mikrovezérlőből) L szinten kell lennie és csak az "adás" végeztével kell H szintre húzni.
Idáig én is eljutottam. Nem ez a probléma, hanem az inicializálás.
Az előző hsz-ben csatolt képen látszik a probléma. D0 = CS D1 = MOSI D2 = SCLK D3 = IC1 DOUT -> IC2 DIN. Az analizálás közvetlenül bekapcsolás után készült. Azt sem értem, hogy IC2 honnan szedte az első két bájtot (0x04, 0x01). Az adatlap szerint bekapcsolás után (power up) minden alaphelyzetbe áll. Idézet: „Nem tudom ellenőrizni, de az adatlapból úgy látom, a CS vonalnak folyamatosan (amíg a négy bájt ki nem szalad a mikrovezérlőből) L szinten kell lennie” Nem csak kettő bájtig kell alacsony szinten tartani? Első az MSB aztán LSB.
"Nem csak kettő bájtig kell alacsony szinten tartani?"
Nem. Ha n db. IC van sorbakötve, akkor csak nx16 bit kiküldése után kerül minden bit a megfelelő helyre a bekapuzáshoz, amit a CS jel felfutó éle vált ki. "Tehát a CS az SCLK adatvonal mindkettőnél ugyan az. " Ez rendben van.
Sajnos ez nálam nem megy.
Tehát az inicializációt is 16 bitenként kéne kiküldeni? Init rész:
SPI:
Most ezeket a függvényeket átírtam 4 bájt küldésre, de a siker elmaradt. A képen látszik
Két IC-t akarsz beállítani, a beállításokat kétszer kell elküldened.
szerk.: Ugyanazon beállítás elküldése két IC-nek: CS alacsonyra 0x04, 0x01, 0x04, 0x01 CS magasra A hozzászólás módosítva: Dec 15, 2022
Nem úgy kell elküldeni mint a max7219-nél?
IC1: CS alacsony 0x04, 0x01 CS magas IC2: CS alacsony 0x04, 0x01, 0x00, 0x00 CS magas szerk.: Az általad írtak eredménye. A DOUT-on kétszer jött ki az adat. A hozzászólás módosítva: Dec 15, 2022
Végül sikerült.
Köszönöm a segítséget mindkettőtöknek. A hibát ott követtem el, hogy debugg módban mindig csak az MSP-t indítottam újra és a MAX6957-et nem rezeteltem. Illetve néha levettem a tápot róla, de a logikai analizátoron keresztül, az SPI vonalon kapott áramot.
Még mindig MAX6957.
Összedobtam pár függvényt a számjegyek megjelenítéséhez. Egy egyszerű számlátót próbáltam négy szemjeggyel.
SPI írás:
Le lehet ezt valahogy egyszerűsíteni? Mármint az írást. Persze a MAX adatlapában van egy pár lehetőség a portok írására, de az csak mégtöbb függvényt jelentene. |
Bejelentkezés
Hirdetés |