Massaccelerations-bänk med display och AVR(assembler)?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Glattnos »

Jag gör en ny tråd om detta!

Jag kommer nog stöta på fler problem men här är en beskrivning av vad jag ska göra:
Programmet som jag försöker göra ska vara till en "massaccelerations-bänk"(bromsbänk) för att effektmäta motorer med hjälp av en trumma som accelereras.
En sensor registrerar varje varv och en 16-bitars timer mäter tiden i microsekunder(CPU 8MHz/presc 8 ) det tar för trumman att snurra ett varv.
Sen jämför jag tiden med tiden till föregående varv, tidskillnaden borde vara ett mått på vridmomentet. I SRAM har jag en 16-bitars variabel som uppdateras om ett större värde har erhållits(varvtid för max vrid).
Sen tar jag (0xffff-tiden)*tidskillnaden och jämför med en 32-bitars variabel i SRAM som uppdateras om ett större värde har erhållits, sparar då även tiden(varvtid för max effekt) i en annan 16-bitars variabel.
Okej, lite luddig förklaring men fråga om ni inte förstår hur jag menar.

Nu är problemet att jag tänker skriva ut värdena på en display som heter GDM1602K och är en vanlig standard-display. Som jag har det nu så ställer man ju in "data-bussen" till displayen och aktiverar en ledning(Enable)för att displayen ska veta att den kan läsa tecknet.
Det fungerar nu men då har jag gjort loopar för att åstadkomma tidsfördröjning på "Enable"-ledningen. Ser ut såhär:

Kod: Markera allt

SEND:   
   sbi      LCD_set, LCD_E
   rcall   Delay
   cbi      LCD_set, LCD_E
   ret
Alltså man gör rcall på SEND när man har ställt in data-bussen till displayen. I SEND så ettställs Enable-ledningen, ett Delay anropas och Enable-ledningen nollställs. Delay är bara en massa loopar som räknar ner ett värde.
Detta är naturligtvis inte bra eftersom prosessorn behöver göra annat än snurra runt i en massa loopar.

Hur kan man göra för att få sändningen till displayen Timer-styrd istället?

Och hur kan man göra sändningarna lite smidigare än som jag har gjort dom, såhär:

Kod: Markera allt

Print_init:
   ldi      temp, WRITE_INST
   out      LCD_set, temp
   ldi      temp, FUNK_set
   out      LCD_data, temp
rcall SEND
   ldi      temp, WRITE_INST
   out      LCD_set, temp
   ldi      temp, LCD_on
   out      LCD_data, temp
rcall SEND
   ldi      temp, WRITE_INST
   out      LCD_set, temp
   ldi      temp, LCD_clr
   out      LCD_data, temp
rcall SEND
   ldi      temp, WRITE_INST
   out      LCD_set, temp
   ldi      temp, ENTRY_mode
   out      LCD_data, temp
rcall SEND
   ldi      temp, WRITE_INST
   out      LCD_set, temp
   ldi      temp, DDadress
   out      LCD_data, temp
rcall SEND
   ret
Går det att göra ett macro på det istället för att skriva många gånger? Jag är inte så hemma på macron men om någon kan ge mig en kompassriktning hur jag ska gå till väga så vore jag väldigt tacksam.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Swech »

Kod: Markera allt

.EQU   VOID = -1

  LDI    ZL,LOW(MY_TAB*2)    ;Z:=PTR MY TAB
  LDI    ZH,HIGH(MY_TAB*2)
PRINT_LOOP:
  LPM   TEMP,Z+                  ;GET WRITE INTR OR VOID
  CPI    TEMP,VOID               ;VOID? 
  BREQ  PRINT_DONE             ; YES DONE
  OUT   LCD_SET,TEMP         ;ELSE SETUP LCD_SET
  LPM   TEMP,Z+                  ;GET DATA 
  OUT   LCD_DATA,TEMP       ;SETUP DATA
  PUSH  ZL                          ;SAVE Z
  PUSH  ZH
  RCALL SEND                      ;SEND IT
  POP   ZH                          ;RESTORE Z
  POP   ZL
  RJMP  PRINT_LOOP             ;AGAIN

PRINT_DONE:
  RET                                 ;OK DONE


MY_TAB:
.DB    WRITE_INST,FUNK_SET
.DB    WRITE_INST,LCD_ON
.DB    WRITE_INST,LCD_CLR
.DB    WRITE_INST,ENTRY_MODE
.DB    WRITE_INST,DDADRESS
.DB    VOID,VOID





Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Glattnos »

Ah, det klarnar! Jag ska försöka få det att fungera så istället så blir det mycket snyggare!
Men för att göra sändningen timer-styrd då? Alltså den rutinen som heter SEND. Jag kan hantera timers men kan inte komma på hur jag ska lösa det på ett snyggt sätt.
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av PCP-Lasse »

Det finns ju lite olika sätt. Men du kan inte vända på problemet då? Att låta mätningarna vara avbrottsrutiner? Vad är det för sensor, hur funkar den?
Användarvisningsbild
Noxin
Inlägg: 614
Blev medlem: 21 september 2006, 11:59:45
Ort: Stockholm, Årsta + Orrefors

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Noxin »

Jag har en liten fråga som inte berör själva programmet.
Varför vill man ha en display som visar effekten? Den ändras ju hela tiden när man sveper över varvtalsområdet.

/Noxin, som också har en DIY-acc.bänk.
Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Glattnos »

PCP-Lasse: Kan du ge ett exempel på ett sätt? Mätningarna sköts redan av avbrottsrutiner, det är en induktiv givare som drar en EXT-pinne hög när den aktiveras och ger ett externt-avbrott på fallande flank.

Noxin: Bra fråga. Men jag är bara intresserad av max effekt/varvtal och max vrid/varvtal, därför sparar jag bara undan dessa max-värden. Efter mätningen så kan dessa skrivas ut på displayen.

Nu är det ju så att displayen inte behöver styras av timer för att detta ska fungera, men om jag i framtiden vill utveckla det lite och skriva ut saker under själva mätningen så är det nog en förutsättning.
Användarvisningsbild
Noxin
Inlägg: 614
Blev medlem: 21 september 2006, 11:59:45
Ort: Stockholm, Årsta + Orrefors

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Noxin »

Okej.
För min del är det även intressant hur effektkurvan ser ut för att MC'n ska "ta sig" fint ur svängarna och vara lättkörd.
PCP-Lasse
Inlägg: 44
Blev medlem: 3 maj 2010, 20:19:56
Ort: Nyköping

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av PCP-Lasse »

Glattnos: Om jag förstått saken rätt så vill du inte slösa bort processorkraft på delayloopar? Då kan du ta en timer med tillhörande avbrottsrutin & lämpligt tidsintervall som du har en räknare i som får avgöra hurvida den ska vänta på nästa gång den kommer in i avbrottet eller göra det du vill. "Argumenten" får förstås vara globala volatiler. Ska du tex "passa" en sträng så får det ju vara en pekare till strängen. Om du vill kan du ju slå av och på räknaravbrottet efter behov, men jag föredrar att ha allt snurrande hela tiden eftersom man då kan upptäcker om systemet börjar nå sin gräns och kan göra något åt det.

Det går ju också att "passa" pekare till funktioner som avbrottsrutinen ska använda, så kan man göra den mer generell, har iofs inte testat det själv än. Men att göra som jag beskrev innan funkar bra, jag har ett system här jag håller på med där mycket fungerar så - "släpp och gå vidare" ;)
Glattnos
Inlägg: 3106
Blev medlem: 29 oktober 2009, 20:01:18

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Glattnos »

Noxin: Ja, jag kan tänka mig det. En anledning att jag inte tar ut en kurva är att jag helt enkelt inte vet hur man gör, än så länge. Men nu ska jag mäta effekt i motorer till radiostyrda modellbåtar och då är det i princip bara toppfart som spelar roll. Då gäller det ju att ha kolv, cylinder, förgasare och effekt-pipa som ger så mycket effekt det bara går. Spelar egentligen ingen roll om effekten kommer som en kick på slutet.
Har du gjort din acc-bänk själv? Hur fungerar den?

PCP-Lasse: Okej, tackar för svaret! Jag misstänkte att man måste göra ungefär så men det blir ju lite krångligt det också. Jag ska nog låta det vara delay-styrt så länge, så får jag försöka styra med timer sen om det behövs. Som jag har tänkt mig nu så behövs det egentligen inte.
Användarvisningsbild
Noxin
Inlägg: 614
Blev medlem: 21 september 2006, 11:59:45
Ort: Stockholm, Årsta + Orrefors

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av Noxin »

Japp, min bänk är egen konstruktion.
Se här hur den funkar.
Nu för tiden använder jag dock en LabJack U3 som mäter tiden för varje trumvarv. Ungefär som du gör.
ds77
Inlägg: 2461
Blev medlem: 24 juli 2008, 09:38:07
Ort: småland

Re: Massaccelerations-bänk med display och AVR(assembler)?

Inlägg av ds77 »

Du får lära dig använda seriekommunikation så kan du (relativt) enkelt logga datan och föra över till en PC för att rita fina diagram. Sen ett förslag, kolla på att programmera i C. Inte för att det är något fel på att programmera i assembler men jag tycker att det blir lättare att göra mer komplexa program och få överblick över dom.
Skriv svar