Fórum témák
» Több friss téma |
A koszt kizárnám,mert a másik panel is ugyanígy viselkedik.
Két tápegységről is próbáltam, ugyanaz a jelenség. 12V bemenet, ezt a VFD használja, 100n és 47µF pufferként, plusz a VFD saját panelján nem tudom, hogy mi. A 12V-t egy 3,3Vos LDO-val csökkentem, bemenetén és kimenetén 100-100nF és így megy a panel 3,3V-os pontjára. @kapu48: A kvarc földelését is kipróbáltam, nem segített. De ha nincs RTC, hanem SysTick-el számolok,annak a megszakítását használom,akkor miért jó? Akkor nincs ilyen hibám. A hozzászólás módosítva: Okt 10, 2017
Linuxon használom, ott megy. Egyébként a Sigrok is tudja kezelni.
A jelanalizátor elég egyszerű: - van egy azonosító egy EEPROM-ba égetve - meg egy Cypress dev board A Saleae szimplán feltölt egy pár soros kódot, mintha Arduino lenne, ellenőrzi az azonosító kódot, utána jönnek az adatok USB-n DMA-val. 50 sornál nem lehet több a program. Minthogy a jelanalizátor egy mezei devboard, bármely más program kezelni tudja (lásd Sigrok), szükség esetén játszani is lehet vele otthon. A hozzászólás módosítva: Okt 11, 2017
Kösd össze a GND-t az USB-d földjével a műszeren (árammérő módban) keresztül. Nézd meg mekkora áramot mérsz ilyenkor.
Aha. Azt hittem, valami ARM van benne és előfeldolgozást is végez.
Kösz!
Szia!
DC 0,0A és AC 218uA áramokat mértem.(True RMS műszerrel) Ekkora áram nem tűnik soknak. Vagy igen?
Nem, ez rendben van.
Hogy viselkedik az áramköröd, ha nem az LDO-don keresztül táplálod meg, hanem az USB csatlakozóra kötsz egy mobiltöltőt?
Szia!
Sajnos ugyanaz a jelenség. Biztos vagyok, hogy az RTC-hez van valami köze. Okozhatja ezt a jelenséget, hogy a Vbat nincs bekötve? A beépített ledet beleraktam az RTC_IRQ_Handlerbe, hogy másodpercenként villogjon, de semmi. Ha elég türelmes vagyok, akkor 10-15 másodperc múlva megjelenik az idő. Ekkor, ha 2 idő beállító gombot nyomkodom, azonnal reagál rá a proci, és ki is jelzi,de ezek külön IRQ-ra vannak téve. Olyan,mintha állandóan az RTC IRQ-ja híváódna meg és annyira leterhelné a procit, hogy mással nem is tud foglalkozni, csak azzal a megszakítással. Létezhet ez ?
Üdv.
STM32F030 al csináltam olyat hogy több eszköz van összekötve USART on keresztül és egy Master küldi a parancsokat a slaveknek amik multiprocesszoros módban válaszolgatnának. Minden jó már kész a hardver is és a program is jól fut addig míg csak 1 db slave van a rendszeren. Eredetileg úgy gondoltam, hogy a TX-ek úgy működnek hogy pull-up resitorral vannak +3V3 ra húzva gondtolam az pont jó lesz mert akkor nem zavar be a nem címzett eszköz a TX vonalba addig míg a címzett válaszol. De mint kiderült push pull az összes TX kimenet így amíg az egyik eszköz ami válaszolna aktívan GND-re húzná a közösített TX vonalat addig a többi eszköz akik épp "alszanak" aktívan +3v3 ra húzzák és itt jön a galiba hogy emiatt nincs rendes jel. Kérdésem hogy szoftveresen tudok e valamit állítani még utólag úgy hogy rendesen kikapcsolni az összes olyan eszközön a TX kimenetet amik nem címzettek mert hardveresen elég nehéz lenne átfaragnom + diódát és felhúzót berakni minden egyes eszközhöz. Remélem érthetően magyaráztam a problémámat. Köszönöm a segítséget.
Nem tudom mit használsz fordítónak?
de pl. a CubeMX mindig elkészíti az xxInit xxDeInit párját. Amiket alkalom szerint felváltva hivogathatsz. Vagy csak simán bemenetnek konfigolod, amig nem haszsnálod:
Aztán ha kel meghivod a pár soros konfigot:
A hozzászólás módosítva: Okt 13, 2017
Rossz részletet másoltam az elöbb!
Megvan, az USART deklaráciánál írtám ár a PP OD-ra. Most már open drain. Megy faszán.
köszi.
Nyilván kell a buszvezetékre egy felhúzás, mint az I2C-nél.
Az 5V-os TTL PP kimeneten is 30cm-nél távolabbra már bizonytalan a jel átvitel! (tapasztalat!)
Most vajon 3.3V OD kimenetel 50K felhúzó, milyen biztos átviteli távolságot lehet elérni vajon? És mekkora sebességgel?
Az sok mindentől függ egy jelet mennyire viszel el. Egyébként max 20cm lesz. A sebesség sem túl magas nem hiszem hogy baj lesz.
A hozzászólás módosítva: Okt 14, 2017
Próbáltad már a nagy sebességű kristályt használni RTC forrásként?
Nem.
Hogyan állítsam át ? Nem hiszem, hogy a kristály lenne a gond,mert a másik panellal is ugyanez a problémám van.
Megj.: 12MHz-es kristályt használtam ebben a projektben A hozzászólás módosítva: Okt 17, 2017
Ezt milyen kristályra számoltad?
Mert tudtommal 8MHz-es van ezen a panelon. És: HSE= 8000000 RTC period = 8000000/128-1=62499
Sziasztok!
STM32F303 mikrovezérlővel kapcsolatos alapvető problémával kérem a segítségeteket. Az SPI1 perifériát szeretném használni. A jelenség az, hogy bármit csinálok, az SCK és MOSI lábak folyamatosan nagy impedancián vannak, függetlenül hogy próbálok-e kommunikációt kezdeményezni. Én úgy tudom, hogy az SPI master üzemmódban az SCK kimenet folyamatosan alacsony impedancián kell hogy legyen még adás szünetben is, és a CPOL bitnek megfelelő logikai szint kell hogy ott legyen folyamatosan. Ezidáig LPC mikrokontrollerekkel foglalkoztam, most próbálkoznék STM32-vel. A konkrét mikrokontroller: STM32F303RBT6 LQFP48 tokozással. Egyelőre egy saját panelen próbálkozom, amin a PA[5],PA[6],PA[7] lábak alternatív funkciójaként szeretném használni az SPI1-et. Ugyanezen port 9-es bitjén egy LED van, amit villogtatok, jelezvén, hogy a mikrokontroller él. Gyanítom, hogy nem elég az RCC_APB2ENR regiszterben bekapcsolni az SPI1-et, hanem mást is kell tenni, de mit? Itt a példaprogram, hátha valaki tud segíteni: void init() { volatile unsigned int i; RCC_AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN); // Switch on GPIOA and GPIOB RCC_APB2ENR |= BIT12; // Enable SPI1 // GPIO A[5]: gp out //GPIOA_MODER &= ~((0b11) << 10); // Clear the two bits related to GPIOA5 mode //GPIOA_MODER |= ((0b01) << 10); // Set the GPIOA5 to gp out function // GPIO A[5]: SPI1_SCK GPIOA_MODER &= ~((0b11) << 10); // Clear the two bits related to GPIOA5 mode GPIOA_MODER |= ((0b10) << 10); // Set the GPIOA5 to alternate function GPIOA_OTYPER &= ~(1 << 5); // Push-pull mode (reset default) GPIOA_PUPDR &= ~((0b11) << 10); // No pull up and pull down GPIOA_OSPEEDR &= ~((0b11) << 10); GPIOA_OSPEEDR |= ((0b11) << 10); // High speed output mode GPIOA_AFRL &= ~((0x0f) << 20); // Clear the bits related to GPIOA5 alternate function selection GPIOA_AFRL |= ((0x05) << 20); // Alternate function 5: SPI1_SCK // GPIO A[6]: SPI1_MISO GPIOA_PUPDR &= ~((0b11) << 12); GPIOA_PUPDR |= ((0b01) << 12); // Internal pull up GPIOA_AFRL &= ~((0x0f) << 24); // Clear the bits related to GPIOA6 alternate function selection GPIOA_AFRL |= ((0x05) << 24); // Alternate function 5: SPI1_MISO // GPIO A[7]: SPI1_MOSI GPIOA_MODER &= ~((0b11) << 14); // Clear the two bits related to GPIOA7 mode GPIOA_MODER |= ((0b10) << 14); // Set the GPIOA7 to alternate function GPIOA_OTYPER &= ~(1 << 7); // Push-pull mode (reset default) GPIOA_PUPDR &= ~((0b11) << 14); // No pull up and pull down GPIOA_OSPEEDR &= ~((0b11) << 14); GPIOA_OSPEEDR |= ((0b11) << 14); // High speed output mode GPIOA_AFRL &= ~((0x0f) << 28); // Clear the bits related to GPIOA7 alternate function selection GPIOA_AFRL |= ((0x05) << 28); // Alternate function 5: SPI1_MOSI // GPIO A[9]: General purpose output for LED GPIOA_MODER &= ~((0b11) << 18); // Clear the two bits related to GPIOA9 mode GPIOA_MODER |= ((0b01) << 18); // Set the GPIOA9 to gp out function // Initialize SPI1 SPI1_CR1 = 0b00111111; //SPI1_CR1 = 0; SPI1_CR2 = (0x07 << 8); // 8 bits word size SPI1_CR1 |= BIT6; // Switch on SPI1 while (1) { GPIOA_ODR = (1 << 9); for (i = 0; i < 100000; i++); GPIOA_ODR = 0; for (i = 0; i < 100000; i++); } } Ez az init függvény van meghívva az IRQ tábla reset címéből közvetlenül. Semmilyen függőséget (stm32cube, hal, vagy bármilyen runtime) nem használok. Egyetlen c forrásfile van. A jelenség az, hogy a LED villog, tehát a ciklus fut a függvény végén, de az SPI SCK és MOSI lábai nagy impedanciásak. Látható a kód elején két kikommentesett sor, amivel teszteltem hogy fizikailag ép-e az a portbit, amin az SCK funkció lenne: Ha nem alternatív funkciót választok ki, hanem sima gpio-t, a port alacsony impedanciás lesz, ahogy kell. Mit hagyhattam ki? Nekem úgy tűnik ebből, hogy az SPI még inaktív, és ezért marad nagy impedanciában az SCK vonal, de sehol nem találom az user manualban mit kellene még beállítani, engedélyezni? Megköszönném ha valaki tudna segíteni. Köszönettel, Tamás
Ezt a tipust én csak 64 pin-esben találtam!
STMicroelectronics STM32F303RBT6, 32bit ARM Cortex M4 MCU, 72MHz, 256 kB Flash, 64-Pin LQFP Nem tudom nálad, hogyan lett: LQFP48 tokozással?
Nem akarok okoskodni, de nem lenne könnyebb dolgod, ha használnád a Peripheral Access Layer Header-t a CMSIS könyvtárból? Ott bit definíciók is vannak. Ha a szerkesztőd tudja az autocomplete funkciót, gépelésben sem jelent több melót.
Szia!
Én F205-öst használtam, aminek hasonlóak az SPI regiszterei, azzal próbáltam összehasonlítani a te beállításaidat. Elsőre nem látok problémát, de két észrevételem lenne: én SPI init előtt resetelem az SPI-t.
Nem tudom, hogy ez jelent-e valamit, de ártani nem árthat. A másik, hogy te sem használod az NSS pint. Ekkor viszont szerintem be kellene állítani a szoftveres Slave Management-et:
Azt nem próbáltam, hogy ezek nélkül elindul-e az SPI, de ha nem használsz NSS-pint, akkor a korrekt konfigurációhoz be kell őket állítani. Remélem, segítettem. Üdv, Tamás
Ez egy működő SPI indítás (igaz STM32F4xx szériához). Ahogy nézem amúgy ugyan az. És nekem is rémlik valami olyasmi (amit toto is írt), hogy kellet az NSS láb is a működéshez, annak ellenére, hogy nem használom.
A hozzászólás módosítva: Okt 23, 2017
Ha nem használja az NSS lábat, akkor szoftveresen kell imitálnia. Erre való az a két bit a CR1 regiszterben, amit toto írt.
Sziasztok!
Köszönöm a segítséget! Az SSM és SSI bitek kellettek, ezekkel már működik. Egyébként a mikrokontroller típusa: STM32F303CBT6: LQFP48
Sziasztok!
Ha használok egy perifériát. nevezetesen az IIC buszt), akkor azokat a pineket mire állítsam? Illetve kell-e állítani/konfigolni valahova, vagy amikor a perifériát inicializálom/engedélyezem, akkor ez automatikusan megtörténik?
Segítene ám, ha megírnád mégis milyen uC-ről van szó.
Feltételezve persze, hogy még mindig azt az STM32-est bűvölöd, a válasz igen. Fel kell konfigolnod a lábakat. Mivel az I2C busz-t felhúzó ellenállásokkal illik (kell) megvalósítani a lábakat alternative function open-drain-re szokás állítani (GPIO_Mode_AF_OD). Majd ezután kell felparaméterezni a perifériát. A hozzászólás módosítva: Okt 27, 2017
|
Bejelentkezés
Hirdetés |