Kommando för upprampning av steppper hastighet

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Kommando för upprampning av steppper hastighet

Inlägg av Tekko »

Hur skriver man om man vill att ett AVR program skall rampa upp hastigheten ?

Programmet:

Kod: Markera allt

$crystal = 3200000
$regfile "2313def.dat"


      Dim Testin As Integer , Wa As Integer


      Config Pinb.0 = Output
      Config Pinb.1 = Output

      Wa = 1
 Lus:

      Gosub Ccw


      Goto Lus
Ccw:

      Portb.0 = 1
      Portb.1 = 0
      Waitms Wa
      Portb.1 = 1
      Portb.0 = 1
      Waitms Wa
      Portb.0 = 0
      Portb.1 = 1
      Waitms Wa
      Portb.1 = 0
      Portb.0 = 0
      Waitms Wa
      Return
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ändra Wa ?
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Inlägg av Tekko »

det ha jag gjot och 1.5 ä det lägsta dä jag kan få motorn att starta, men jag vill ha så att programmet rampar upp varvtalet automatiskt så man kan nå ännu högre varv.

Eller varför inte så man har 2 momentana knappar, en för att öka och en för att minska.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag har svårt att tro att 1,5 är det lägsta värde, Wa är deklarerat som Integer = heltal. Man kan inte använda komma till heltal.

Lösningen är såklart att använda en timer och styra ett nytt steg för varje interrupt och med en annan timer har man kolla på tiden och ändrer reload-värdet för första timern till man når en viss snabbhet.

Men då du verkar köra något BASIC-aktigt får du allt klura ut det själv, sånt skit hanskas jag inte med.
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Inlägg av Tekko »

BASCOM-AVR. Sätter jag Wa till 1 så piper motorn bara, på 1.5 startar den.
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Antagligen avrundas värdet uppåt till 2, vilket alltså säger att 2ms mellan varje puls kan den starta på men inte på 1ms. Du behöver alltså en bättre tidsupplösning.

Lycka till med BASIC'en, det verkar ju fungera bra *ironisk*
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Inlägg av Tekko »

Vilket värdelöst svar :evil:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Vilket värdelöst svar...

Skitsnack !

Du har fått det absolut korrekta svaret fån Icecap, använd en timer.

Vem är det som vill ha hjälp ?
Och vem är det som har lagt gratistid på en flummig fråga ?

Lite ödmjukhet och tacksamhet fungerar oftast bättre om man vill ha hjälp... :-)
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Kanske, men det är sanningen. 1ms är för högt att starta med, 2ms starter den med, alltså måste du ha en bättre upplösning i tid. Är det så att BASCOM inte klarar av den biten är det ett kasst programmeringsspråk, så enkelt är det.

Men testa med timer lösningen.

I timer-ISR'n ska man göra (pseudokod):
integer Steg;
Steg = Steg + 1;
om(Steg > 3) Steg = 0;
on Steg goto (heter det väl?)
0:
Portb.0 = 1
Portb.1 = 0
goto Exit
1:
Portb.1 = 1
Portb.0 = 1
goto Exit
2:
Portb.0 = 0
Portb.1 = 1
goto Exit
3:
Portb.1 = 0
Portb.0 = 0
Exit:

klart

Sedan ändrar du bara timerns hastighet och kan då köra stegen i den hastighet du vill.

Detta kan jag fixa på en PIC16F628A med MikroC på ca: 30 min med rampning osv från scratch, med en aning mer tid kan jag fixa att man kan begära "x steg CW/CCW" med upp- och ner-rampning via serieporten.
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Inlägg av Tekko »

Icecap, det är nog Step, man har inte svenska i kod vad jag vet.

Vad finns det för andra proggs som också är lätta ? Fick detta av LaRdA.
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1652
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Inlägg av RDX* »

Det är inget fel på bascom, gjorde en datormus mha bascom på 5min igår, gör om det med era C/asm-kompelatorer 8) .

Tekko vad vill du göra? vilka tider vill du ha på Wa?

Den mest flexibla lösningen är nog att konfigurera timer0 så att den genererar ett overflow-interrupt. Sedan kan du reglera hastigheten mha. en prescaler och att ladda counterregistret (TCNT0) med ett lämpligt värde innan du lämnar interuptet.


Varför kan man inte använda svenska när man programmerar?
Senast redigerad av RDX* 13 mars 2006, 12:52:57, redigerad totalt 1 gång.
Användarvisningsbild
JimmyAndersson
Inlägg: 26579
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Tekko:
"Icecap, det är nog Step, man har inte svenska i kod vad jag vet."

Det var därför Icecap skrev "(pseudokod)" :)

Översätt till Basic och du är klar.


sodjan skrev:
"Och vem är det som har lagt gratistid på en flummig fråga ?"

Gratis? Icecap, du skickar väl faktura som vanligt när det gäller Basic-frågor? :)
Jag kör ju också Basic. Är uppe i 1265.50:- nu. :D
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jorå, jag kör ju med löpande månad + 30 dagar så jag samlar ihop bara till månadsfakturan ;-)

Dessutom kan man kalla variablerna vad man vill om namnen enbart är med de legala tecken (brukar vara 'a'->'z', 'A'-'Z', '0'-'9' och '_') och de inte är reserverat av språket.

Men jag undrar en sak:
RDX*: "...gjorde en datormus mha bascom på 5min igår..."?
Hur? Jag menar, att emulera kommunikationsmässigt är ju inget svårare problem men du byggde alltså en datormus med software? Kan du trolla med knäarna också? Vilken färg har den?
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1652
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Inlägg av RDX* »

Icecap> Änså länge är den protoboardfärgad :wink:. Det jag syftar på är att bascom har färdiga rutiner till det mesta, I mitt fall så finns det färdiga biblitotek för PS/2 komunikation. Så istället för att lägga ner en vecka på att lära sig handskakningsprotokoll för möss och en dator så använder jag tex 2 rader för att flytta muspekaren 10 pixlar upp.

Kod: Markera allt

Config Ps2emu = Int1 , Data = Pind.3 , Clock = Pinb.0
Ps2mousexy 0 , 10 , 0
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jo du, ge mig ett PS2-emu lib och jag ska göra det samma på den tiden.

Men till topic:
Tekko: jag har lagt in ett program i C just för att visa hur interrupts kan fungera, det ligger under software och är RC-servo styrningen. I den ändrar jag Timer1-värdet jämt och ständigt, det kan kanske vara något att suga på fastän det är C och PIC.
Skriv svar