Fórum témák
» Több friss téma |
Ez tartalmazná az ST-link programozót is?
http://www.ebay.com/itm/ST-Official-NUCLEO-F410RB-STM32F410RB-STM32...1XKxio Idézet: „Ez tartalmazná az ST-link programozót is?” Igen, a letörhető kis panelon az van.
Nekem az STM32F103 nagyon bejött. Az AliExpress-en már 1.7$-ért rendelhető, a tudása/perifériái viszont tényleg komolyak.
A másik kedvenc a Nodemcu (ESP8266), abban a Wifi szolgáltatás nagyon jó, csapnivaló perifériákkal és kevés pinnel. Viszont a Nodemcu 1MByte kódot is tud futtatni!, emellett a flash-en még 3MByte hely marad adatoknak, ami nem kevés, ha web szervert akarsz írni. Nálam most a paletta: - STM32F103: gyors chip, jó perifériákkal (ADC/SPI/I2C/...) - ESP8266: wifi, nagy kód - Attiny85, Attiny84: ha kis panelt akarok építeni, nem nagy batárt
Érthetetlen problémába ütköztem.
4db Bemeneteket használnék számláló megvalósításához. A megszakítás meghívódik ezt a HAL_UART_Transmit el ellenőrzöm. De a belső if(!(GPIOA->IDR & 0x10)) már nem hajtódik végre. Pedig a megfelelő lábat kapcsolgatom. Próbáltam a if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)) feltétellel is de azzal sem láttok esetleg valami hibát amit én nem? A megszakítás meg sem hívódhatna ha a láb nem menne le alacsonyba érthetetlen.
A hozzászólás módosítva: Aug 12, 2017
Esetleg így próbáld: if((GPIOA->IDR & 0x10) == 0)
Sajnos nem megy így sem. De még a HAL-os sem ami máshol megy. Egyébként sok sok hülyeség egyszerűen nem működik a programban. Pl a nem hajlandó a uint16_t tömből másik változóba írni meg
a másik szorozni próbálok két értéket utána pedig elosztani 4095-el mindig 0 az eredmény ha lecserélem az adc_store[2]-t mondjuk valami számra pl 1000 akkor megy. Pedig az adc_store közvetlenül a DMA val van feltöltve és ha azt olvasom akkor ugyan úgy van benne érték tehát nem nulla.
Olyan mintha meghülyült volna a fordító vagy maga a processzor nem tudom.
Mohndjuk ez GPIOA->IDR 16 bites regiszter.: if((GPIOA->IDR & 0x0010) == 0) ?
Nem írtad melyik vezérlőt használod, meg az induláskori beállításokat sem közölted, de stm32f103 esetén a pending regisztert törölni kell a megszakításban pl:
Nem az a baj hogy nem hívódik meg a megszakítás hanem meghívódik de azon belül egy egyszerű input read feltétel nem teljesül amikor tudom jól hogy teljesülni kellene. EZ az amit nem értek.
A második HAL_UART_Transmit_DMA függvény soha nem fog lefutni, mert az első még biztosan nem végzett.
Úgy emlékszem, hogy a megszakításban a EXTI_PR-t kell lekérdezni, nem a GPIO-t.
volatile-nek konfiguráltad az adc_store-t? Ha sehol sem írod a programban (csak DMA írja), akkor simán kioptimalizálhatja a fordító. Másik probléma lehet ha rossz méretűek (típusúak) a változóid és emiatt túlcsordulás lép fel, de ez nem látszik a mellékelt példákból.
GPIO-val is működnie kellene (én gyakran azzal használom, hisz sokszor mind lefutó mind felfutó élre szeretném, ha meghívódna). Látnunk kéne, hogy konfigurálta az EXTI megszakítást, illetve a GPIO bemeneteket, hogy többet mondjunk.
Még egy kérdés. Miért nem rendes számlálót használsz input capture-el? Akkor hardveresen elintézhetnéd az egészet. Persze, azért előtte jöjj rá mi a gond (abból lehet a legjobban tanulni).
A számláló jó lett miután kicseréltem a GPIOA->IDR feltételt az EXTI->PR re.
Így működik:
Az adc_store[] máslása másik változóba megoldódott úgy hogy volatile uint16_t ként deklaráltam. Előtte sima uint_16 volt. Ami még nem megy az a szorzás ami rossz eredményt ad vissza:
mindegyik változó uint32_t Egyenként olvasva a változók értéke: analog_correction_in4 = 4095 analog_in4 = 1407 (1405-1410 közt változik ezt az adc_store[] ból másolom) és eredményül a analog_corrected_in4 kb 6150-et ad vissza és ez is picit változik gondolom ahogy ahogy analog_in4 változik. Ami fontos hogy csak 12 bitet tudok kiolvasni tehát lehet hogy 6150 még ennél is több. Most 1407-et kellene kapjak de nem értem miért nem.
Egyébként azért nem csináltam hardveres számlálót mert jelenleg 6 bemenet megy számlálóként és lehet még több meg egyébként nem is gondoltam erre
Ha csak 12 bitet tudsz kiolvasni, akkor hogy jön ki a 6150?
Elírtam bocsi 14 bitet. Közben nyektettem a programot és az egyik változó tárolt nagyobb értéket mint 14 bit így egy kicsit másképpen de meg tudtam oldani. Köszönöm a segítségeket remélem így már jó lesz.
A & 0xFFFFF000 (alsó 12bit nullázása) szerintem teljesen felesleges, ha utána a 12 bittel jobbra shifteléssel ki is tolod mind a 12-t a semmibe.
Jójó, nem voltan benne biztos hogy a semmibe tolja. A windowsos számológépből indultam ki.
Szerintem kevered a shift-et a rotate-el.
Üdv!
Segítséget kérnék, kissé belekeveredtem ezekbe a definiálásokba. Egy részlet a Code Red cég redlib könyvtárából - amit használok - a stdio.h fájlból. Lényege, hogy kódcsökkentés céljából kérhetek csak integer printf variánst (float nem) a CR_INTEGER_PRINTF definiálással, valamint string esetén karakterenkénti kijelzést -így nem használja a heap-et - a CR_PRINTF_CHAR definiálással. Jól látom, ha mindkettőt kiválasztom az utóbbi nem érvényesül?
Közben megfejtettem, tényleg hibás. A 9. sorba #ifdef kell, nem #if.
A 3.3V kicsit szokatlan nekem, szoktatok rajta FET-et használni, vagy bipoláris tranzisztor kell egy relé kapcsolásához?
Rendeltem a neten 3.3V-os tranzisztorokat, de alig nyitnak ki, vagy sehogy se. Már egy LED-hez is határeset. 7002 és A39T volt amit vettem.
AO3400 Nekem bevált, Vgs=2.5 Voltnál 4 Ampert tud kapcsolni.
Én szeretem a bipoláris tranyókat is használni, de ha valamiért fet kell, akkor kisebb áramokra az FDV301-t használom. Ennek 2,7V-os gate feszültség mellett 5R alatti garantált a kimeneti ellenállása, a bemenete csak kb. 10pF-os.
Köszi, rendeltem 20 db-ot 200 Ft-ért.
P csatornásra van esetleg tuti tippetek?
Sikerült alkotnom. Nos a megvásárolt tranzisztoraim tökéletesen mennek 3.3V-on.
Egy probléma volt: az A79T P csatornás a 7002 meg N csatornás Értelemszerűen ha egy P csatornás tranzisztort N-ként kötöm be, akkor érhetnek meglepetések. Ennyivel is okosabb lettem. A hozzászólás módosítva: Aug 30, 2017
|
Bejelentkezés
Hirdetés |