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   102 / 176
(#) csabeszq válasza kiborg hozzászólására (») Okt 5, 2017 /
 
Ez nem indok, amikor az ebay-en 2000 ft egy jelanalizátor.

A szükséges eszközöket be kell szerezni. Napjaim mentek el nekem is 10 perc alatt megoldható feladatokkal.

Az idő is pénz, nem is kevés.
(#) kiborg válasza csabeszq hozzászólására (») Okt 5, 2017 /
 
Szia!

Körbenéztem én is és már ha minden igaz úton is van
A legkisebbet vettem, 24MHz/8 csatorna. Bízom benne, hogy elég lesz.
(#) wbt válasza csabeszq hozzászólására (») Okt 5, 2017 /
 
Ezek az olcsó kis cuccok neked működnek az új PC-s programmal? Mert nekem nem ismeri fel. Most az 1.2.14-et használom a pici 8-ashoz.
(#) kiborg hozzászólása Okt 6, 2017 /
 
Sziasztok!

Új nyűggel jelentkezem. Valószínűleg kis hibám van, de nem találom, hogy mi:
A nyomógomb egyik fele +3,3V-on, másik fele a B port 12-es lábán. A portot bemenetnek állítom, bekapcsolva a lehúzó ellenállás.Felfutó élre szeretném, ha történne megszakítás.

  1. // Gomb PIN bemenet beállítás
  2.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  3.     GPIO_InitStruccture.GPIO_Pin=GPIO_Pin_12;
  4.     GPIO_InitStruccture.GPIO_Mode= GPIO_Mode_IPD;
  5.     GPIO_InitStruccture.GPIO_Speed=GPIO_Speed_50MHz;
  6.     GPIO_Init(GPIOB,&GPIO_InitStruccture);
  7. // Gombhoz IRQ2 hozzárendelés és megszakítási paraméterek beállítása
  8.     EXTI_InitTypeDef EXTI_InitStructure;
  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  10.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12);
  11.     EXTI_ClearITPendingBit(EXTI_Line2);
  12.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  13.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  14.     EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  15.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  16.     EXTI_Init(&EXTI_InitStructure);
  17. // EX IRQ2 paramétereinek beállítása
  18.     NVIC_InitTypeDef NVIC_InitStructure;
  19.     NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  20.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  21.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  22.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  23.     NVIC_Init(&NVIC_InitStructure);

A jelenlegi IRQ2 rutin: (van egy breakpoint, hogy lássam, ha megnyomva van a gomb)
  1. void EXTI2_IRQHandler(void)
  2. {
  3.     asm("nop");
  4.     }


Remélem ránézésre kiszúrjátok a hibát.
A hozzászólás módosítva: Okt 6, 2017
(#) csatti2 válasza kiborg hozzászólására (») Okt 6, 2017 /
 
Ha a 12-es lábat használod, akkor miért a 2-es lábra való EXTI_Line-t, illetve megszakítást használod? Ezeknek mind egyezniük kell, nem választhatod meg önkényesen.
Itt az EXTI_Line12, EXTI15_10_IRQn és EXTI15_10_IRQHandler kell.
(#) kiborg válasza csatti2 hozzászólására (») Okt 6, 2017 /
 
  1. // Gomb IRQ hozzárendelés
  2.     EXTI_InitTypeDef EXTI_InitStructure;
  3.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  4.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource12);
  5.     EXTI_ClearITPendingBit(EXTI_Line12);
  6.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  7.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  8.     EXTI_InitStructure.EXTI_Line = EXTI_Line12;
  9.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  10.     EXTI_Init(&EXTI_InitStructure);
  11.  
  12.     NVIC_InitTypeDef NVIC_InitStructure;
  13.     NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  14.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  15.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  16.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  17.     NVIC_Init(&NVIC_InitStructure);


  1. void EXTI15_10IRQHandler(void)
  2. {
  3.     asm("nop");
  4.     }


Akkor elméletileg így jónak kellene lennie ?
Viszont nem működik. A Megszakítást jelző bitet nekem kell törölnöm vagy automatikusan törlődik? A Handler-be belerakjam: EXTI_ClearFlag(EXTI_Line12); ? Mert ha belerakom,akkor sem jó.

A program elindulásakor a breakpoint utáni első sorra ugrik(mindegy is, hogy mi az a sor).
Viszont valami történik,mert ha megnyomom a gombot, akkor olyan mintha fagyna a program, semmi nem történik,minden megáll. Ha megállítom a programot, akkor mindig a
  1. def_irq_handler    EXTI15_10_IRQHandler       // EXTI Line 15..10
soron áll meg.
(#) csatti2 válasza kiborg hozzászólására (») Okt 6, 2017 /
 
EXTI_ClearITPendingBit(EXTI_Line12); <- ezt bele kell raknod a megszakításodba. Ha nem rakod, újra és újra meghívódik a megszakítás.
Ez érvényes a többi fajta megszakításra is.
(#) kiborg válasza csatti2 hozzászólására (») Okt 6, 2017 /
 
Kipróbáltam:
  1. void EXTI15_10IRQHandler(void)
  2. {
  3.     asm("nop");
  4.     EXTI_ClearITPendingBit(EXTI_Line12);
  5.     }

De sajnos ugyanaz a helyzet. Mintha nem törlődne a megszakítást jelző bit.

A változatosság kedvéért, ha manuálisan törlöm a Pending Regisztert, akkor is végre akarja hajtani a megszakítást.
A hozzászólás módosítva: Okt 6, 2017
(#) csatti2 válasza kiborg hozzászólására (») Okt 6, 2017 /
 
EXTI15_10_IRQHandler nem pedig EXTI15_10IRQHandler !!!
(#) kiborg válasza csatti2 hozzászólására (») Okt 6, 2017 /
 
Jogos. Működik. Nagyon köszönöm a segítséget.
Ha 13-as és 14-es lábra is rakok egy-egy gombot. Bemenet konfigurálás után, ha valamelyiken megszakítás fog történni, akkor a EXTI15-10_IRQHandler fog meghívódni és utána kell eldöntenem a Pending bit segítségével, hogy a 3 közül melyik történt meg?Jól gondolom?
A hozzászólás módosítva: Okt 6, 2017
(#) csatti2 válasza kiborg hozzászólására (») Okt 6, 2017 /
 
Jól gondolod.
(#) Kovidivi válasza csatti2 hozzászólására (») Okt 7, 2017 /
 
Ilyen elgépelésre nem dob a fordító hibát? Ezt megjegyezni, hogy hol van alsó vonal, elég nehéz.
A hozzászólás módosítva: Okt 7, 2017
(#) csatti2 válasza Kovidivi hozzászólására (») Okt 7, 2017 /
 
Miért dobna? Az összes megszakítás létezik alapból a vektor táblában csak épp nem mutatnak sehová (ezért akadt ki a porgramja a "def_irq_handler EXTI15_10_IRQHandler" soron). Te pedig elnevezheted bárhogyan a saját függvényeidet (a C szabályai szerint persze), onnantól kezdve, hogy nem egyezik meg valamelyik megszakítás nevével, egy hagyományos függvényé válik, amit a fordító majd kioptimalizál, hisz nem használod sehol sem.

Ami a rendes nevének a megjegyzést illeti, ha én teszteltem volna a kódot, azonnal feltűnt volna, hogy az a fent említett soron áll meg a program, amiből következik, hogy valamiért a megszakítás nem fordult be a helyére. Innen már nem nehéz eljutni oda, hogy elírtam a nevét. Tegnap már fáradt voltam, ezért tartott még egy komment váltásig, míg feltűnt a hiba.
(#) kiborg hozzászólása Okt 9, 2017 /
 
Sziasztok!

Újabb probléma.
Használom az RTC-t, 1 mp-nként megszakítás van, ezzel nincs is gond, a VFD kijelzőnek 1mp-nként küldöm az új kiírni valót, semmi gond.
A probléma akkor kezdődik, ha kihúzom az USB-ből a programozót.
Ekkor megáll a számolás. Hogy egy klasszikust idézzek: De miért ???
Újraindítás után(teljes tápelvétel és visszadugás) nem is ír ki semmit.
Ha visszadugom az USB-be, minden helyreáll és megy tovább.
Ha kiveszem az RTC inicializáló részt, akkor minden frankó, csak éppen akkor nincs 1mp-ként megszakítás.
Ezt mi okozhatja? Két panelnél is ugyanaz a jelenség van. Minden pont forrasztott, kontakthiba kizárva.
A hozzászólás módosítva: Okt 9, 2017
(#) wbt válasza kiborg hozzászólására (») Okt 9, 2017 /
 
Véletlenül az RTC felhúzóellenállásai nem az USB tápra vannak kötve? (már ha I2C-s a cucc). Nézd meg szkóppal az adatvonalaid. Különben az átlagos RTC-t nem kell többször inicializálni. Szokott még (főleg I2C esetén) olyan gond lenni, hogy pont kommunikációban megy el a táp vagy reset jön és a uC elölről akarja kezdeni, de az RTC meg tartja az előző állapotsorát. Milyen RTC?
(#) kiborg válasza wbt hozzászólására (») Okt 9, 2017 /
 
Szia!
STM32F103C8-ban levő belső RTC-ről van szó. Egy SPI-s VFD van rákötve.
A PC-hez elég csatlakoztatni a GND VAGY a VCC szálat, ha bármelyik a kettő közül csatlakoztatva van, akkor megy az RTC és a program, ha nem,akkor megáll.
Néha-néha kegyesen lép egyet, de az 1mp helyett, 5-10 mp-ént.
Én valami beállításra vagy programra gondolok, mert hardveres változás nincs.
(#) kiborg válasza kiborg hozzászólására (») Okt 9, 2017 /
 
Nem értem.
sysTick-el hozok létre 1mp-s késleltetést,RTC-t nem is használom. És ha leválasztom a PC-től,akkor megáll az egész.Ha visszadugom az USB-t,megy tovább,mintha mi se történt volna.
Mi a franc lehet ez?
(#) kiborg válasza kiborg hozzászólására (») Okt 9, 2017 /
 
Berakom a kódot is, hátha valaki talál benne valamit:
  1. void RTC_IRQHandler(void)
  2. {
  3.   if (RTC->CRL & (1<<0) )           // check second flag
  4.       {
  5.         RTC->CRL &= ~(1<<0);        // clear second flag
  6.         mp++;
  7.  
  8.         if (mp==60)
  9.             {
  10.                 mp=0;
  11.                 perc++;
  12.             }
  13.         if (perc==60)
  14.             {
  15.                 perc=0;
  16.                 ora++;
  17.             }
  18.         if (ora==24)
  19.             {
  20.                 ora=0;
  21.             }
  22.       }
  23.       refresh=1;
  24. } // end RTC_IRQHandler


Ez meg az RTC init:
  1. void RTC_Init(void)
  2. {
  3.   RCC->APB1ENR |= RCC_APB1ENR_PWREN;                            // enable clock for Power interface
  4.  
  5.   PWR->CR      |= PWR_CR_DBP;                                   // enable access to RTC, BDC registers
  6.  
  7.  
  8. RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  9. RCC_RTCCLKConfig(RCC_LSE_ON);
  10. while((RCC->BDCR & RCC_FLAG_LSERDY) == 0);
  11.  
  12. RCC_RTCCLKCmd(ENABLE);
  13. //RTC_WaitForSynchro();
  14.  
  15.  
  16. RTC_SetPrescaler(32767);
  17. RTC_WaitForLastTask();
  18. RTC_SetCounter(1);
  19. RTC_WaitForLastTask();
  20.  
  21. RTC_ITConfig(RTC_IT_SEC,ENABLE);
  22. RTC_WaitForLastTask();
  23. //NVIC->ISER[0] |= (1 << (RTC_IRQChannel & 0x1F));            // enable interrupt
  24. //int time=0;
  25. //time=RTC_GetCounter();
  26.  
  27.     NVIC_InitTypeDef nvicStructure;
  28.     nvicStructure.NVIC_IRQChannel = RTC_IRQn;
  29.     nvicStructure.NVIC_IRQChannelPreemptionPriority = 1;
  30.     nvicStructure.NVIC_IRQChannelSubPriority = 15;
  31.     nvicStructure.NVIC_IRQChannelCmd = ENABLE;
  32.     NVIC_Init(&nvicStructure);
  33. }
A hozzászólás módosítva: Okt 9, 2017
(#) Topi válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Teljes clock konfigod hogy néz ki? Az USB rész az a proci USB-je, vagy illesztő? Órajelet mértél a külső kristályodon? Nem lehet hogy a külső oszcillátorod nem is megy igazából, csak automatikusan átáll belső oszcillátorra az órajel generátor rész.
(#) wbt válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Aha.... A konfig hogy néz ki? Amikor kihúzod az USB-t akkor teljesen magában áll a paneled vagy valami feltöltő/debuger stb. rá van még dugva? Kapcsolóüzemű tápról megy? Ha mondjuk szkóppal összetesteled, akkor helyrejön?
(#) kiborg válasza Topi hozzászólására (») Okt 10, 2017 /
 
@ Topi és @ wbt:

Teljes konfigot csak délután tudok feltenni.
Az USB rész az illesztő USB-je (STLink V2), de a tápot már saját LDO-val állítom elő a 12V-ból.
Délután rámérek majd az órajelekre.

Amikor teljesen magában áll a panel,akkor nincs semmi rádugva és áll a program/RTC, ha a debugger GND pinjét csatlakoztatom,akkor megy tovább, de csak akkor ha a debugger is be van dugva az USB-be, ha nincs,akkor hiába dugom össze a GND-t. De ahhoz hogy menjen, elég csak az USB külső GND-jét hozzáérinteni a panel GND pontjához.
A rendszer egy kis 12V-os kapcs.üzemű tápról megy, többről is próbáltam, de ugyanez a szituáció.
Szkópos testeléses próba délután.
(#) vargham válasza kiborg hozzászólására (») Okt 10, 2017 /
 
A reset láb be van kötve az ST-Linkbe?
(#) kiborg válasza vargham hozzászólására (») Okt 10, 2017 /
 
Nincs.
SWD-n keresztül programozom.
(#) Topi válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Akkor resetkor rossz vagy a clock, vagy a program counter / vektortábla rossz helyre mutat (linkelési hiba). A programozó állítja és kényszeríti, hogy hogyan induljon (és honnan), de ha nem programozóról indítod, akkor flash kezdő címről indul, és akkor például ezek szerint ott nincs kód.
A hozzászólás módosítva: Okt 10, 2017
(#) kiborg válasza Topi hozzászólására (») Okt 10, 2017 /
 
Ha már fut a program, megy a kijelzés, számolja az időt,stb.. és ekkor húzom le a programozót, akkor is megáll.
(#) kiborg válasza Topi hozzászólására (») Okt 10, 2017 /
 
Sziasztok!

Itt a teljes forrás, ez dolgoztatja a procimat.

main.c
    
(#) kiborg válasza Topi hozzászólására (») Okt 10, 2017 /
 
Meg jut eszembe: ha CSAK a GND vezeték van csatlakoztatva(SWDIO és SWDCLK nincs) és akkor kapcsolom ki és be, akkor tökéletesen fut a program, tehát a programozó nem szólhat bele, nem kényszeríti semmire. Ezért zárnám ki a vektortábla/program counter hibát.
Valami clock hiba még lehet. Szkópot majd most nézek.
(#) kiborg válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Kicsúsztam a szerkesztési időből

Na kicsit körbenéztem oszcilloszkóppal is.
Ha a szkóp GND-jét csatlakoztattam a panel GND-jére, ment minden, ahogy elő van írva, ha levettem,akkor megállt minden. Ha olyankor csináltam tápelvételt, nem indult el, de ha a szkóp kábele rajta volt, akkor elindult.
Sőt elég volt egy nem bekapcsolt műhely PC USB kábelének a GND pontját hozzáérinteni a panel GND-jéhez és minden rendben van.
Lövésem sincs, hogy mi lehet a háttérben.
A 32,xxxkHzes kvarc úgy néz ki, hogy rezeg,mert jelet tudtam mérni rajta.
A hozzászólás módosítva: Okt 10, 2017
(#) wbt válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Akkor nem csak én jártam így (nekem zajos volt a cucc, de amint rátettem a szkópot, azonnal megszűnt a zaj így nem tudtam megmérni, honnan jön); én mindenképp az órajel vagy a kosz felé nézelődnék (rajtamaradt, tok alá bekúszott folyasztószerrel jártunk hasonlóan), már ha a tápfesz stabil, nem gerjed. Ez valami nagyon UFO dolog lesz.
(#) kapu48 válasza kiborg hozzászólására (») Okt 10, 2017 /
 
Még 1 ötlet.
Földeld le a kvarc tokját!
Következő: »»   102 / 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