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   59 / 177
(#) killbill válasza gtk hozzászólására (») Ápr 1, 2015 /
 
Idézet:
„Volt mar teszt DDS-re, es ugyanolyan spektrumot, zajrt mertek a jol megtervezett 2 retegu panelon is mint a 4 retegu, demo panelon.”
Itt a hangsuly a jol megtervezetten van. De ott azert altalaban az egyik oldalon csak fold van, meg par rovidebb drot, esetleg a hidegitok. Ha mindket oldal tele van vonallal keresztul-kasul, alkatresszel, akkor szerintem nem lesz igazan jo. Mukodni valoszinuleg fog, csak kerdes, hogy mennyire zavarerzekeny es mennyire sugaroz. Van egy Olimex ARM7-es panelom, 2 retegu PCB, mindket oldalon alatreszek. Mit mondjak, nem tennem be ipari alkalmazasba, de itthon jatszani jo.
(#) ciw válasza gtk hozzászólására (») Ápr 1, 2015 / 1
 
Lehet teliföldes a panel csak a kolléga direkt nem nyomott neki Rastnest-et, hogy jobban látszódjon a rajzolat.

Én is csináltam már STM32F407 kijelzős,sram,nand,sd stb panelt kétoldalasra és semmi gond nincs vele, a vonalvezetésre érdemes figyelni, teljes kézi huzalozással oldottam meg. A kijelzőhöz nem szabad hosszú kábelt tenni (ez a tapasztalatom) törekedni kell, hogy lehetőleg (kábel nélkül) közvetlenül csatlakozzon a kijelző egy tüskesoron keresztül az anyapanelhoz.

Esetleg ajánlanám a 429-et az már tud SD-ram ot kezelni, ami sokkal gyorsabb a és főleg olcsóbb az SRAM-nál, illetve az SSD1963 is elhagyható, de akár maradhat is.

Tehát tapasztalataim szerint elmegy két oldalon teli GND-vel és szépen körbekondizva az ARM-ot minden táplábon, nem szabad sajnálni a kondikat, persze az igazi a 4 réteg legalább de ha nincs más marad a 2 réteg.

Én innen szoktam venni, kiváló kijelzők.
(#) Docky_SD hozzászólása Ápr 1, 2015 /
 
Sziasztok !

Egy projecthez volna szükségem ARM procira és ethernet kapcsolatra.
Mivel van egy olimex sam7 x256 boardom gondoltam ez a proci megfelelő lenne.
Sajna MSC-bp megszünni látszik. Hol tudok beszerezni SAM7 et itthon ? A farnellnél úgy irják hogy nem gyártják, digikeynel van 1000db . Tud valaki pontos infot? Érdemes ezzel a procival projectet kezdeni ?

Köszi!
(#) gtk válasza killbill hozzászólására (») Ápr 1, 2015 /
 
Termeszetesen egyetertek.
(#) killbill válasza Docky_SD hozzászólására (») Ápr 1, 2015 /
 
Idézet:
„Tud valaki pontos infot? Érdemes ezzel a procival projectet kezdeni ?”
Szia!
Nekem van egy db, ha kell. En mar nem kezdenek ARM7-tel. Inkabb Cortex-M3 vagy kisebb melokba M0, M0+. Speciel en NXP chip-eket hasznalok, az LPC sorozatot. Ethernethez pl. LPC176x, vagy 178x, ha kell kulso RAM, LCD. Mostanaban nezegetem az LPC18xx sorozatot. FDH-nal lehet is kapni oket.
(#) vzoole válasza killbill hozzászólására (») Ápr 2, 2015 /
 
Tényleg túlzás volt olyat mondani, hogy jó lehet, sok kompromisszumot kellett kötni.
Egyébként ezt végül valóban négy rétegen oldottam meg.

Ez csak egy próba volt, mondhatni a magam szórakoztatására, hogy meg tudom-e csinálni két oldalra. Sikerült is . Majd ha egyszer tudom azért megmérem/méretem mennyire lett rossz.
(#) Docky_SD válasza killbill hozzászólására (») Ápr 7, 2015 /
 
Szia !

Köszi a gyors választ, megfontolom és utána nézek az ajánlott típusoknak.
Köszi !
(#) cooxee hozzászólása Ápr 11, 2015 /
 
Nuvoton arm cortex mo mini51, valaki tudja, h táp elvétel es ujra betaplalas alkalmaval miert nem indul el a felflashelt progi?!
(#) cooxee válasza cooxee hozzászólására (») Ápr 11, 2015 /
 
Nah a megfejtés a chip options -> io initial state options-> quasi bidirectional mode ezt kell választani es akkor jó!
(#) ColoradoKid hozzászólása Ápr 19, 2015 /
 
Sziasztok!

A timerek szinkronizációjára van valami szájbarágós leírás? A gyári nekem kicsit tömör...
A hozzászólás módosítva: Ápr 19, 2015
(#) kapu48 válasza ColoradoKid hozzászólására (») Ápr 19, 2015 /
 
(#) ColoradoKid válasza kapu48 hozzászólására (») Ápr 19, 2015 /
 
Köszi, igazából konkrétan az stm32F4 timereire gondoltam.

A kérdésem az lenne konkrétan, hogy pédául a CNT regiszter értékét manuálisan lehet nullázni? Tehát TIMx->CNT = 0 működik?
(#) kapu48 válasza ColoradoKid hozzászólására (») Ápr 19, 2015 /
 
Inkább hívd meg a: „TIM_SetCounter()”
  1. stm32f4xx_tim.c
  2. /**
  3.   * @brief  Sets the TIMx Counter Register value
  4.   * @param  TIMx: where x can be 1 to 14 to select the TIM peripheral.
  5.   * @param  Counter: specifies the Counter register new value.
  6.   * @retval None
  7.   */
  8. void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter)
  9. {
  10.   /* Check the parameters */
  11.    assert_param(IS_TIM_ALL_PERIPH(TIMx));
  12.  
  13.   /* Set the Counter Register value */
  14.   TIMx->CNT = Counter;
  15. }
(#) ColoradoKid válasza kapu48 hozzászólására (») Ápr 19, 2015 /
 
HAL könyvtárral kezdtem el dolgozni, abban sajnos nincs ilyen. Egyébiránt, melyik az ajánlottabb, a Standard vagy a HAL? Nekem olyan infóim vannak, hogy az ST a HAL-t protezsálja újabban, de kezd az a meggyőződés kialakulni bennem, hogy a Standard profibb, jobban ki van dolozva...
(#) kapu48 válasza ColoradoKid hozzászólására (») Ápr 19, 2015 /
 
Én levagyok maradva a régi Keil UV4-nél!
És CMSIS, STM32F4xx_StdPeriph_Driver használok.
(#) Suncorgo hozzászólása Ápr 25, 2015 /
 
Sziasztok!

Lenne egy pár kérdésem amely még számomra kérdőjel az STM32 ARM chipeknél. Nemsokára jön egy STM32F407VGT6 -os (LQFP100 tokozás) kontroller és épp a kapcsolási rajzot készítem.

bootloader:
Ezekben van gyárilag bootloader?

Úgy látom hogy a BOOT0 az egy dedikált láb, a BOOT1 pedig egy port. Erre a portra köthetek bármit ugyan úgy nem fog bezavarni hogy boot kiválasztó láb? pl ha kötök rá egy ledet, akkor nem mind egy hogy startup-nál tápra vagy testre húzza azt a lábat.

A bootloader befolyásolja az SWD programozást? Vagyis bootloader-en keresztül zajlik?


Ha nem azon keresztül zajlik akkor mind két boot lábat testre kell kötni ha nem szeretném használni a bootloadert, mármint melyiket kell kiválasztanom hogy elinduljon: user Flash, system memory, embedded SRAM ?
A hozzászólás módosítva: Ápr 25, 2015
(#) Suncorgo hozzászólása Ápr 25, 2015 /
 
Mi a különbség az SWD és a JTAG között? Mármint tudom hogy két fajta protokollról van szó illetve az utóbbira fel lehet fűzni sorba több kontrollert is de a sebesség és a debuggolási lehetőségek milyenek összehasonlítva? Mit tud a JTAG amit az SWD nem?

Melyik lábakat kell bekötni egyikhez másikhoz?

SWD:
SWDIO: PA13
SWCLK: PA14
Reset: ?
a reset a 14-es lába (NRST) vagy az NJTRST PB4?
a reset lábra kondenzátort érdemes e rakni és vagy le/fel húzó ellenállást?


és egy nagyon alap kérdés amely lehet hülyeség de nem tudom így megkérdezem: a timer/counter számlálók is megállnak ha debuggolás közben pause-t nyomok?
A hozzászólás módosítva: Ápr 25, 2015
(#) kapu48 válasza Suncorgo hozzászólására (») Ápr 25, 2015 /
 
Nem új ez már régi motoros.
És itt sok mindent meg tudhatsz:
STM32F4DISCOVERY


És olyan olcsón adják, kezdőként nem szabad házilag barkácsolni.
Szinte biztos, hogy az első pár példány hibásan fog működni!
(#) Suncorgo válasza kapu48 hozzászólására (») Ápr 26, 2015 /
 
Már több éve építgetek mikrovezérlős nyákokat, elolvasni is el tudom, csak idő hiányában kérdezem ezeket
(#) Topi válasza Suncorgo hozzászólására (») Ápr 26, 2015 /
 
Egyértelműen lassabb az SWD mint a JTAG. Én azt szoktam, hogy amíg nagyon korai protó valami, addig a teljes JTAG-et ráteszem (ha nagy a panel akkor 10p-s szalagcsati - ZL231-10PG és társaival, ha kicsi a panel a teszttű csatlakozásokat). Ha már szériába kerül (vagy nagyon megszorultam IO-k terén) akkor szoktam rátenni az SWD-t. Alapból ha a program feltöltés után nem akarsz HW-es resetet, akkor elég az SWCLK és az SWDIO, de ha akarod hogy az IDE+Debugger tudjon resetet küldeni akkor kötsd be az NRST-t is.

De alapvetően mivel a debugolás sokszor teljesen megöli a szoftver időkritikus és "időkritikusságát hardverfüggésben kiélő" részeket, nagyon-nagyon ritkán használok debuggert, kódfeltöltésnél meg csak egy kicsivel lassabb.

Timer kérdés. A Systick is megáll. Debug alatt a timerek kérdését (akár sima akár wdt), az alábbiakkal tudod tovább konfigurálni. Kódrészlet, csak ötletadónak.

  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_DBGMCU, ENABLE);
  2. DBGMCU_APB1PeriphConfig(DBGMCU_TIM2_STOP, ENABLE);
A hozzászólás módosítva: Ápr 26, 2015
(#) Suncorgo válasza Topi hozzászólására (») Ápr 28, 2015 /
 
Köszönöm szépen Topi , lényegében akkor nekem az SWD bőven elég. Építettem egy 3 tengelyes CNC marót és most az AVR-ek kevésnek bizonyultak a feladathoz mivel igaz hogy a számítógépre megírtam a 3D interpolátort viszont annyi adatot kell kiküldenem USB soros konverter segítségével UART-al hogy a sebesség is lassú. Még 1Mb/s-el is. Ha pedig pufferelem (1k nem túl sok ) akkor pedig szaggatottan mar. Így most az interpolátort akarom beleköltöztetni egy STM32F407-esbe.
A hozzászólás módosítva: Ápr 28, 2015
(#) csabeszq hozzászólása Ápr 28, 2015 /
 
Van egy ilyen alappanelem.

Láttam, hogy STM32-re is van valami Arduino-szerűség, amit Maple-nek hívnak. Fel lehet a fenti panelre varázsolni a maple-t, hogy könnyebben menjen az ismerkedés?

Alappanel: STM32F103C8T6

Van programozóm, szóval fel tudok rá tenni bootloadert. Sajnos meglehetősen szegényes az internet ezzel kapcsolatban.
(#) icserny válasza csabeszq hozzászólására (») Ápr 28, 2015 /
 
Idézet:
„Fel lehet a fenti panelre varázsolni a maple-t, hogy könnyebben menjen az ismerkedés?”

Azt nem tudom, de Roger Clark cikkében pont egy ilyen kártyát illeszt be az Arduino 1.5.1-be a cikkben hivatkozott Arduino STM32 plugin segítségével. (Az Arduino 1.5.1 helyett állítólag az újabb, 1.6.x verziókat is használhatod...).
(#) Suncorgo hozzászólása Ápr 28, 2015 /
 
A Keil-ben a watch ablakban általában mindig állítani kell a változók kijelzési formátumát.

Hogyan tudom beállítani a Keil-t hogy alapértelmezetten ne hexába hanem decimálisan írjon minden értéket debuggolás közben?
(#) Suncorgo hozzászólása Ápr 29, 2015 /
 
Közben találtam ezt a megoldást de nem segített. Ugyan az a helyzet.
(#) elektros90 hozzászólása Máj 11, 2015 /
 
Sziasztok!
Lassan véget ér számomra a diákélet és kezdődik életem hátralévő élete. Sok állásajánlatnál elvárás az ARM alapú processzorokkal való tapasztalat. Hozzájutottam egy devboardhoz STM alapon. Majd ha lesz időm, fogom tanulgatni. Különben van AVR/Arduino ill. Pickitem is ezért multiplatformon fogok tanulni. Kérdésem az, hogy tulajdonképpen milyen feladatokra használják ezeket a nagy teljesítményű processzorokat? A DSP lehetőségével tisztában vagyok, 5évig a FIR/IIR/FFT és barátait tanultuk... (De ez annyira nemtetszik...) Ezenkívül?
Youtuben is csak az alap tutorialok vannak, meg pár gyári example bemutatója.
A hozzászólás módosítva: Máj 11, 2015
(#) Suncorgo hozzászólása Máj 26, 2015 /
 
STM32F407 NVIC problémákkal küszködök. Van egy timerem: TIM2
Ennek a timernek az OVF interruptjából léptetek egy léptetőmotort.

Van egy UART interruptom is, és amikor az uart adatot fogad és visszaküldi beakad a léptetőmotor. Nem pont erre való az NVIC? A TIM2 prioritása mind kettő nulla. De a kód többet mond:

  1. void uart_initializalas(uint32_t sebesseg)
  2. {
  3.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  4.        
  5.         GPIO_InitType.GPIO_Pin = USART1_TX_LAB | USART1_RX_LAB;
  6.         GPIO_InitType.GPIO_Mode = GPIO_Mode_AF;
  7.         GPIO_InitType.GPIO_Speed = GPIO_Speed_50MHz;
  8.         GPIO_InitType.GPIO_OType = GPIO_OType_PP;
  9.         GPIO_InitType.GPIO_PuPd = GPIO_PuPd_UP;
  10.         GPIO_Init(USART1_PORT, &GPIO_InitType);
  11.        
  12.         GPIO_PinAFConfig(USART1_PORT, GPIO_PinSource9, GPIO_AF_USART1);
  13.         GPIO_PinAFConfig(USART1_PORT, GPIO_PinSource10, GPIO_AF_USART1);
  14.        
  15.         USART_InitType.USART_BaudRate = sebesseg;
  16.         USART_InitType.USART_WordLength = USART_WordLength_8b;
  17.         USART_InitType.USART_StopBits = USART_StopBits_1;
  18.         USART_InitType.USART_Parity = USART_Parity_No;
  19.         USART_InitType.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  20.         USART_InitType.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
  21.         USART_Init(USART1, &USART_InitType);
  22.        
  23.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  24.        
  25.         NVIC_InitType.NVIC_IRQChannel = USART1_IRQn;
  26.         NVIC_InitType.NVIC_IRQChannelPreemptionPriority = 0;
  27.         NVIC_InitType.NVIC_IRQChannelSubPriority = 0;
  28.         NVIC_InitType.NVIC_IRQChannelCmd = ENABLE;
  29.         NVIC_Init(&NVIC_InitType);
  30.        
  31.         USART_Cmd(USART1, ENABLE);
  32.        
  33.         uart_rx_adat_torles();
  34. }
  35.  
  36. void uart_rx_adat_torles()
  37. {
  38.         memset( (char *)uart_rx_adat, '\0', sizeof(uart_rx_adat));
  39. }
  40.  
  41. void USART1_IRQHandler(void)
  42. {
  43.         if(USART_GetITStatus(USART1, USART_IT_RXNE))
  44.         {
  45.                 if(!uart_adat_feldolgozasi_kerelem)
  46.                 {
  47.                         char d = USART1->DR;
  48.                
  49.                         if(d != '\n' && (uart_rx_adat_index < MAX_RX_ADAT_MERET)) //üzenet vége
  50.                         {
  51.                                 uart_rx_adat[uart_rx_adat_index] = d;
  52.                                 uart_rx_adat_index++;
  53.                         }
  54.                         else
  55.                         {
  56. //                              uart_adat_feldolgozasi_kerelem = IGAZ;
  57.                                 uart_karakterlanc_kuldes(uart_rx_adat);
  58.                                
  59.                                 uart_rx_adat_index = 0;
  60.                         }
  61.                 }
  62.                
  63.                 USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  64.         }
  65. }
  66.  
  67. void uart_karakterlanc_kuldes(volatile char *c)
  68. {
  69.         while(*c)
  70.         {
  71.                 while( !(USART1->SR & 0x00000040) ); //várakozás ha van folyamatban lévQ adatküldés
  72.                 USART_SendData(USART1,*c++);
  73.         }
  74.        
  75.         while( !(USART1->SR & 0x00000040) ); //várakozás ha van folyamatban lévQ adatküldés
  76.         USART_SendData(USART1,'\n');
  77. }


TIM2:
  1. void linearis_interpolator_initializalas()
  2. {
  3.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  4.  
  5.         TIM_TimeBaseInitTypeDef timerInitStructure;
  6.         timerInitStructure.TIM_Prescaler = 83;
  7.         timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  8.         timerInitStructure.TIM_Period = 1999;
  9.         timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  10.         timerInitStructure.TIM_RepetitionCounter = 0;
  11.         TIM_TimeBaseInit(TIM2, &timerInitStructure);
  12.         //TIM_Cmd(TIM2, ENABLE);
  13.        
  14.         TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  15.        
  16.         NVIC_InitTypeDef nvicStructure;
  17.         nvicStructure.NVIC_IRQChannel = TIM2_IRQn;
  18.         nvicStructure.NVIC_IRQChannelPreemptionPriority = 0;
  19.         nvicStructure.NVIC_IRQChannelSubPriority = 15;
  20.         nvicStructure.NVIC_IRQChannelCmd = ENABLE;
  21.         NVIC_Init(&nvicStructure);
  22. }
  23.  
  24. void cnc_g1(long double x_cel, long double y_cel, long double z_cel, double f)
  25. {
  26.         gep_dolgozik = IGAZ;
  27.         cnc_x_cel = x_cel;
  28.         TIM_Cmd (TIM2,ENABLE);
  29.         while(gep_dolgozik == IGAZ);
  30. }
  31.  
  32. void TIM2_IRQHandler()
  33. {
  34.         if (TIM_GetITStatus(TIM2, TIM_IT_Update))
  35.         {
  36.                 if((szerszampozicio_x < (cnc_x_cel - (motorvezerlo_szamolt_felbontas / 2.0))))
  37.                 {
  38.                         x_plusz();
  39.                 }
  40.                
  41.                 if((szerszampozicio_x > (cnc_x_cel + (motorvezerlo_szamolt_felbontas / 2.0))))
  42.                 {
  43.                         x_minusz();
  44.                 }
  45.                
  46.                 if((szerszampozicio_x > (cnc_x_cel - (motorvezerlo_szamolt_felbontas / 2.0))) && (szerszampozicio_x < (cnc_x_cel + (motorvezerlo_szamolt_felbontas / 2.0))))
  47.                 {
  48.                         TIM_Cmd (TIM2,DISABLE);
  49.                         gep_dolgozik = HAMIS;
  50.                 }
  51.                
  52.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  53.         }
  54. }


Miért akad a léptetőmotor? Ha a prioritása a timernek a legnagyobb és az uartnak a legkisebb akkor addig az uart interruptnak nem is kellene elkezdődni lefutni amíg a timer interrupt fut nem? Vagy valamit nagyon rosszul értelmezek?
(#) norbiv8 válasza Suncorgo hozzászólására (») Máj 26, 2015 /
 
Hello, nem a 0 a magasabb prioritás?
(#) Suncorgo hozzászólása Máj 26, 2015 /
 
Most látom hogy az uartnak magasabb prioritása van a bemásolt kódomban. De ez csak azért lehet mert már mindenféleképpen próbáltam állítani.
(#) Suncorgo válasza norbiv8 hozzászólására (») Máj 26, 2015 /
 
De, minél kisebb a szám annál magasabb a prioritás
Következő: »»   59 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.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