hjælp til servo kontrol med timer (Læst 130273x)

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #240 Dato: November 21, 2011, 18:53:39 »
Du er genial.
Nu sker der da noget.
hvis jeg smider toggleLED1(); ind lige efter sSeconds++;
så slukker led når jeg trykker på start. og så sker det fantastiske at led tænder igen efter x antal sek. nogle gange. andre gange bliver led lidt skarpere lige når der trykkes  :P

men forsinkelsen er altid mellem 10 og 26 sek og startknappen kan derefter aktiveres igen og enten gøre led skarpere eller slukke den i x sek. for det meste omkring 15 sek
« Senest Redigeret: November 21, 2011, 18:58:02 af jascore »

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #241 Dato: November 21, 2011, 19:00:07 »
Du er genial.
Nu sker der da noget.
hvis jeg smider toggleLED1(); ind lige efter sSeconds++;
så slukker led når jeg trykker på start. og så sker det fantastiske at led tænder igen efter x antal sek. nogle gange. andre gange bliver led lidt skarpere lige når der trykkes  :P

men forsinkelsen er altid mellem 10 og 26 sek og startknappen kan derefter aktiveres igen og enten gøre led skarpere eller slukke den i x sek. for det meste omkring 15 sek

Prøv at have toggleLED1(); inde lige efter sSeconds++, og vent, se hvor lang tid der går mellem hver gang den går fra tændt til slukket eller slukket til tændt.
Der skulle helst gå 1 sekund, dvs. 2 sekunder mellem hver 'tænd'.

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #242 Dato: November 21, 2011, 19:13:53 »
det er der jeg har den nu og den gør som beskrevet ovenfor. den køre kun 1 cycle pr tryk på startknappen og mellem 5 og 25 sek

dette sker kun hvis der er en startDosing() lige efter sei i main, og samtidig inde i startknap funktionen fjerner jeg den efter sei i main sker der intet.
så for mig giver det ikke lige mening

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #243 Dato: November 21, 2011, 19:18:10 »
ok fjernede startdosing efter sei, i main.
smed en setLES ind i startknapfunktionen så jeg er sikker på den slukker når jeg trykker.
der efter er der en toggleLED lige efter sSecond++

den slukker når jeg trykker på strtknap og tænder x antal sek efter igen. men så forbliver den tændt

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #244 Dato: November 21, 2011, 19:22:08 »
ok fjernede startdosing efter sei, i main.
smed en setLES ind i startknapfunktionen så jeg er sikker på den slukker når jeg trykker.
der efter er der en toggleLED lige efter sSecond++

den slukker når jeg trykker på strtknap og tænder x antal sek efter igen. men så forbliver den tændt

Har du prøvet at vente på den i mere end 1 minut, for at se om den blinker med lange mellemrum ?
-Det kan nemlig godt være at Timer0 interruptet kører en forkert hastighed.

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #245 Dato: November 21, 2011, 19:30:21 »
har prøvet at lade den stå i flere minutter og den togler ikke igen.
tiden der går før den togler når jeg har slukket den ved at trykke på start er random men ændre jeg på dip indstillingen så ændres det interval til noget meeeget længere

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #246 Dato: November 21, 2011, 20:18:02 »
har prøvet at lade den stå i flere minutter og den togler ikke igen.
tiden der går før den togler når jeg har slukket den ved at trykke på start er random men ændre jeg på dip indstillingen så ændres det interval til noget meeeget længere

Hmm, det kan selvfølgelig være den blinker meget hurtigt. Prøv at sætte toggleLED ind lige før sSeconds = 0;

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #247 Dato: November 21, 2011, 21:03:58 »
Den kommer desværre slet ikke derned har ventet 5 min nu så det er hvertfald ikke fordi timeren kører for hurtigt

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #248 Dato: November 21, 2011, 23:08:26 »
nu prøvede jeg for sjovt at hive hele timer funktionen fra ISR(TIM0_OVF_vect) uden for i sin egen funktion som jeg ikke starter nogle steder.
i ISR(TIM0_OVF_vect) satte jeg så en toggleLED ind og den står og pulserer så ISR(TIM0_OVF_vect) må jo virke
smider jeg så en waitSeconds(1) ind foran toggleLED() så blinker led med et interval på ca ½sek så waitsecond funktionen må jo også virke
dog ikke helt for den er ureglmæssig og der bliver ikke længere interval hvis den skal vente længere



Hvis jeg så trykker på startknappen så halveres intervallet ca. nogle gange. det er meget tilfældigt. andre gange starter den igen med samme interval. men der går altid x sek før den starter igen
« Senest Redigeret: November 21, 2011, 23:38:03 af jascore »

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #249 Dato: November 22, 2011, 02:10:53 »
nej jeg kan simpelthen ikke gennemskue det.
det sidste jeg har prøvet er at sætte hele timeren ind i ISR(TIM0_OVF_vect) igen så den er som du har sendt den.
hvis jeg så sætter TCNT0 = 255; så flasher ledden faktisk helt nede i if(sSeconds >= 60)   funktionen
men det går meget stærkt og lige under sSeconds++; lyser den konstant, så det må køre sindsygt hurtigt systemet.
hvilket også bliver bekræftet ved at ledden blinker langsomere hvis jeg sætter if(sSeconds >= 255)

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #250 Dato: November 22, 2011, 08:16:26 »
hvis jeg så sætter TCNT0 = 255; så flasher ledden faktisk helt nede i if(sSeconds >= 60)   funktionen
men det går meget stærkt og lige under sSeconds++; lyser den konstant, så det må køre sindsygt hurtigt systemet.
hvilket også bliver bekræftet ved at ledden blinker langsomere hvis jeg sætter if(sSeconds >= 255)

Du har lige fundet ud af noget vigtigt. :)

Prøv at sætte TCNT0 til 0, og hav en toggleLED lige efter.
Kan du se om lysdioden blinker (hurtigt) nu ?


Hmm, vent nu lige lidt... Har du på noget tidspunkt ændret chippens fuse-bits ?

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #251 Dato: November 22, 2011, 10:24:00 »
Citér
Hmm, vent nu lige lidt... Har du på noget tidspunkt ændret chippens fuse-bits ?

Det har jeg selv tænkt på men aner det faktisk ikke.
Jeg kan ikke huske om jeg nogensinde fik den til at compile med avrstudio5 makefile, den er pr default 8mhz. Men jeg mener aldrig at jeg fik den til at compile med denne
og så har jeg kun brugt den som jeg fik af dig.

når jeg køre avrdude skriver den avrdude: safemode: Fuses OK. og det er når der er compilet med den makefile hvor fuses sat til H:0xdf og L:0x62

Citér
Kan du se om lysdioden blinker (hurtigt) nu ?
Ja, når TCNT0 = 0 så blinker den hurtigt

Har også prøvet den interne _delay_ms(10); sammen med en toggleLED
hvis TCNT0 = 255 og _delay_ms(1000) så er den ca tændt 1 sek og derfter slukket 1 sek så det er jo rigtigt nok men 1000 ms er jo 1 sek ligemeget om den køre 1 Mhz eller 8Mhz så det kan jo ikke bruges til så meget

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #252 Dato: November 22, 2011, 12:38:29 »
når jeg køre avrdude skriver den avrdude: safemode: Fuses OK. og det er når der er compilet med den makefile hvor fuses sat til H:0xdf og L:0x62

Jeg husker ikke om den altid gør dette, eller om den kun gør det ved skrivning.

Hvis du har mulighed for at skrive følgende...

make fuse

Vil det indstille fuses som de er i Makefile. Denne kommando køres nemlig ikke normalt ved almindelig flashing.

Citér

Citér
Kan du se om lysdioden blinker (hurtigt) nu ?
Ja, når TCNT0 = 0 så blinker den hurtigt.

Har også prøvet den interne _delay_ms(10); sammen med en toggleLED
hvis TCNT0 = 255 og _delay_ms(1000) så er den ca tændt 1 sek og derfter slukket 1 sek så det er jo rigtigt nok men 1000 ms er jo 1 sek ligemeget om den køre 1 Mhz eller 8Mhz så det kan jo ikke bruges til så meget
[/quote]


Prøv at lave denne smule test-kode...

Kode:
while(1)
{
    _delay_ms(250);
    _delay_ms(250);
    toggleLED1();
}

Hvis microcontrolleren kører 1MHz, vil ovenstående LED blive tændt med 1 sekunds mellemrum, dvs. fra tænd-til-tænd vil være 1 sekund.

Derimod, hvis den blinker ca. 8 gange så hurtigt, kører microcontrolleren 8MHz.

 

Offline jascore

  • Jordet Basic
  • **
  • Indlæg: 157
  • Antal brugbare Indlæg: 0
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #253 Dato: November 22, 2011, 14:16:54 »
Citér
Prøv at lave denne smule test-kode...
den er en lille smule langsomere end et sek. men et delay på 250ms er det ikke 250 ms ligemeget om den køre 8 mhz eller 1 mhz

hvor skal jeg skrive det der med make fuse henne ?  ;D
taber ca 4 sek på et minut
« Senest Redigeret: November 22, 2011, 15:02:49 af jascore »

 

Offline pacman

  • Højpas filter
  • *****
  • Indlæg: 311
  • Antal brugbare Indlæg: 8
  • Jens Bauer (Forsøgs-person)
    • Vis profil
Sv: hjælp til servo kontrol med timer
« Svar #254 Dato: November 22, 2011, 15:41:26 »
Citér
Prøv at lave denne smule test-kode...
den er en lille smule langsomere end et sek. men et delay på 250ms er det ikke 250 ms ligemeget om den køre 8 mhz eller 1 mhz

Næh, ikke på en microcontroller, for det måles nemlig i forhold til clock-frekvensen.
Og hvis microcontrolleren står på 8MHz, og F_CPU's værdi er defineret til 1000000, så vil den blinke 8 gange i sekundet i stedet for 1 gang.

Citér

hvor skal jeg skrive det der med make fuse henne ?  ;D
taber ca 4 sek på et minut

Den er sådan set iorden, så du behøver ikke make fuse. Hvis du bruger WinAVR, kan du prøve at skrive det nede i bunden af vinduet, dér, hvor du har log og fejl-meddelelser, men jeg ved ikke om det vil fungere. -Jeg bruger jo selv et lidt anderledes system.

-Nu har vi konstateret at den kører 1MHz, som vi gerne vil have den til.
Hvorfor den så opfører sig så fjollet at køre interruptet alt for hurtigt, må vi lige finde ud af.

Jeg har prøvet at gå opsætningen igennem endnu en gang (og prøvet at skrive en ny opsætning, for at se hvordan jeg ville gøre det i dag), jeg fik samme resultat af opsætning, så jeg er ved at tro at der kan være noget andet, som påvirker interruptets tids-indstilling.

Jeg er nok nødt til lige at bruge lidt mere tid på det, inden jeg sender et kvalificeret svar. ;)