Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   103 / 176
(#) kiborg válasza wbt hozzászólására (») Okt 10, 2017 /
 
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
(#) csabeszq válasza wbt hozzászólására (») Okt 11, 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
(#) csatti2 válasza kiborg hozzászólására (») 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.
(#) wbt válasza csabeszq hozzászólására (») Okt 12, 2017 /
 
Aha. Azt hittem, valami ARM van benne és előfeldolgozást is végez.
Kösz!
(#) kiborg válasza csatti2 hozzászólására (») Okt 12, 2017 /
 
Szia!

DC 0,0A és AC 218uA áramokat mértem.(True RMS műszerrel)
Ekkora áram nem tűnik soknak. Vagy igen?
(#) csatti2 válasza kiborg hozzászólására (») Okt 13, 2017 /
 
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?
(#) kiborg válasza csatti2 hozzászólására (») Okt 13, 2017 /
 
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 ?
(#) cimopata hozzászólása Okt 13, 2017 /
 
Ü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.
(#) kapu48 válasza cimopata hozzászólására (») Okt 13, 2017 /
 
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:
  1. /*Configure GPIO pin : PB6 */
  2.   GPIO_InitStruct.Pin = GPIO_PIN_6;
  3.   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  4.   //GPIO_InitStruct.Pull = GPIO_PULLUP;
  5.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  6.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

Aztán ha kel meghivod a pár soros konfigot:
  1. /**USART1 GPIO Configuration    
  2.     PB6     ------> USART1_TX
  3.     PB7     ------> USART1_RX
  4.     */
  5.     GPIO_InitStruct.Pin = GPIO_PIN_6;
  6.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  8.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
A hozzászólás módosítva: Okt 13, 2017
(#) kapu48 válasza kapu48 hozzászólására (») Okt 13, 2017 /
 
Rossz részletet másoltam az elöbb!

  1. /*Configure GPIO pin : PA6 */
  2.   GPIO_InitStruct.Pin = GPIO_PIN_6;
  3.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  4.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  5.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
(#) cimopata válasza kapu48 hozzászólására (») Okt 14, 2017 /
 
Megvan, az USART deklaráciánál írtám ár a PP OD-ra. Most már open drain. Megy faszán.

köszi.
(#) kapu48 válasza cimopata hozzászólására (») Okt 14, 2017 /
 
Nem igazán értem!
Igy a kimenetnek csak a GND része kapcsolódik:
open drain
(#) icserny válasza kapu48 hozzászólására (») Okt 14, 2017 /
 
Nyilván kell a buszvezetékre egy felhúzás, mint az I2C-nél.
(#) cimopata válasza icserny hozzászólására (») Okt 14, 2017 /
 
Belső felhúzás van az épp elég.
(#) kapu48 válasza cimopata hozzászólására (») Okt 14, 2017 /
 
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?
(#) cimopata válasza kapu48 hozzászólására (») Okt 14, 2017 /
 
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
(#) csatti2 válasza kiborg hozzászólására (») Okt 14, 2017 /
 
Próbáltad már a nagy sebességű kristályt használni RTC forrásként?
(#) kiborg válasza csatti2 hozzászólására (») Okt 14, 2017 /
 
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.
(#) csatti2 válasza kiborg hozzászólására (») Okt 17, 2017 /
 
  1. // Select HSE as RTC clock source
  2.   RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
  3.   // Enable RTC Clock
  4.   RCC_RTCCLKCmd(ENABLE);
  5.   // Wait for RTC registers synchronization
  6.   RTC_WaitForSynchro();
  7.   // Wait until last write operation on RTC registers has finished
  8.   RTC_WaitForLastTask();
  9.   // Enable the RTC Second
  10.   RTC_ITConfig(RTC_IT_SEC, ENABLE);
  11.   // Wait until last write operation on RTC registers has finished
  12.   RTC_WaitForLastTask();
  13.   // Set RTC prescaler: set RTC period to 1sec
  14.   RTC_SetPrescaler(93749); // RTC period = RTCCLK/RTC_PR = (93.75 KHz)/(93749+1)
  15.   // Wait until last write operation on RTC registers has finished
  16.   RTC_WaitForLastTask();


Megj.: 12MHz-es kristályt használtam ebben a projektben
A hozzászólás módosítva: Okt 17, 2017
(#) kapu48 válasza csatti2 hozzászólására (») 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
(#) csatti2 válasza kapu48 hozzászólására (») Okt 19, 2017 /
 
írtam, hogy 12MHz-esre.
(#) tbutuza hozzászólása Okt 22, 2017 /
 
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
(#) kapu48 válasza tbutuza hozzászólására (») Okt 22, 2017 /
 
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?
(#) rolandgw válasza tbutuza hozzászólására (») Okt 22, 2017 /
 
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.
(#) toto válasza tbutuza hozzászólására (») Okt 23, 2017 / 1
 
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.
  1. RCC->APB2RSTR |= RCC_APB2RSTR_SPI1;                           //SPI1 reset
  2.   RCC->APB2RSTR &= ~RCC_APB2RSTR_SPI1;

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:
  1. SPI1->CR1    |= SPI_CR1_SSM;                       //Software Slave Management enable
  2.   SPI1->CR1    |= SPI_CR1_SSI;                                  //NSS pin ignored

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
(#) vzoole válasza tbutuza hozzászólására (») Okt 23, 2017 /
 
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.
  1. void init_spi1(void)
  2. {
  3.   RCC->AHB1ENR  |= (1<<0);    //Enable PortA
  4.   RCC->APB2ENR  |= (1<<12);   //Enable SPI1
  5.  
  6. // SPI1-CLK
  7.   gpio_mode(GPIOA,5,ALTERNATE);
  8.   gpio_pin_function(GPIOA,5,5);
  9. // SPI1-MOSI
  10.   gpio_mode(GPIOA,7,ALTERNATE);
  11.   gpio_pin_function(GPIOA,7,5);
  12. // SPI1-MISO
  13.   gpio_mode(GPIOA,6,ALTERNATE);
  14.   gpio_pin_function(GPIOA,6,5);
  15. // SPI1-SS
  16.   gpio_mode(GPIOA,4,ALTERNATE);
  17.   gpio_pin_function(GPIOA,4,5);
  18.   gpio_pupd(GPIOA,4,PULL_UP);
  19.  
  20.   SPI1->CR1 |= (1<<6); //SPI Enable
  21.   SPI1->CR1 |= (SPI_1_CLOCK_PRESCALER<<3); //Prescaler: 0=2 1=4 2=8 3=16 4=32 5=64 6=128 7=256
  22.   SPI1->CR1 |= (1<<2); //Master mode
  23.   SPI1->CR1 |= (SPI_1_CLOCK_POLARITY<<1); //CLK polarity
  24.   SPI1->CR1 |= (SPI_1_CLOCK_PHASE<<0); //CLK phase
  25. }//initSPI4
A hozzászólás módosítva: Okt 23, 2017
(#) csatti2 válasza vzoole hozzászólására (») Okt 24, 2017 / 1
 
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.
(#) tbutuza hozzászólása Okt 24, 2017 /
 
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
(#) kiborg hozzászólása Okt 25, 2017 /
 
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?
(#) csatti2 válasza kiborg hozzászólására (») Okt 27, 2017 /
 
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
Következő: »»   103 / 176
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem