Maskinistens Twitter-flöde  Stöd Maskinisten via Patreon  Maskinistens nätverk - information på svenska  Maskinistens nätverk - information på finska  Maskinistens nätverk - information på norska  Maskinistens nätverk - information på danska  Maskinistens nätverk - information på isländska
Forumindex

ForumindexForumindexMaskin-databasFotoalbumKalender-informationKöp & SäljDownloadsLexikonKontaktregisterCrimedatbase

Åkerman-register
Visa forum för mobila enheter

ForumindexVerkstadsforumAllmänt[Allmänt] El/elektronik

Bygga egen styrning (ECU) till en pumpdyse-dieselmotor

1612 inlägg • Sida 31 av 108
Diskutera el/elektronik i allmänhet här

Towil

#451 » 14:32:03, 17-02-2017
  • Överför markerat ord till lexikonet

Här finns en del nyttigt med Bruce Land.
Är ju föreläsningar på Cornell så det är en del fluff.

AVR microcontroller lectures 2012
https://www.youtube.com/playlist?list=P ... 1F3505D8D5

#21 -- Lab 4 and PID control
https://youtu.be/TERxX9Sykwc?t=22m11s

1 person gillar det här inlägget.
Användarvisningsbild
Towil
Moderator
Moderator
 
Blev medlem: 20:00:40, 18-08-2007
Ort: Nybro
Sverige



Janson1 (trådstartaren)

#452 » 21:35:39, 20-02-2017
  • Överför markerat ord till lexikonet

Nu har jag tittat igenom delar av länkarna med Bruce Land. Det är ganska långa pass med ganska lite matnyttigt. Men, jag tror jag skall beta igenom ett par tre stycken helt igenom ändå vid tillfälle.
Jag har nog hamnat i en återvändsgränd då jag inte kommer nån vart. Jag tänker i alla fall använda pulsIn funktionen så länge det går, jag är tveksam till om det är lönt att göra en snabbare lösning då det ändå är väntetid och den är ganska lätt att beräkna. PureAtmega328.h ger en del oönskade bieffekter som jag inte hunnit/orkat felsöka i än. Det känns mer angeläget då det snabbar på I/O processerna med betydligt mindre klockcykler.
Men, jag behöver nog sluta jobbet innan jag orkar gå vidare med alla problem.
Jag har nog lite kört fast...
Janson1
Fler än 500 inlägg
 
Blev medlem: 12:50:52, 21-03-2010
Ort: Mark Västra Götaland
Sverige
Maskintyp: Grävmaskin (larvburen)
Maskin: Bobcat X125 (2.5 ton)
Case CK-15 (Kubota kx41)
+ div. flygplan, helikoptrar
Senaste renoveringsobjekten:
Piper PA-24 Comanche från -64 (flyger nu)
Ferguson Grålle/VW diesel 1952/2002 (rullar nu)
10 Kw solcellsanläggning som surrar och går.
Försöka få till ett Ö-drift elsystem utifall att...

Ulf

#453 » 23:53:41, 20-02-2017
  • Överför markerat ord till lexikonet

Jag har tyvärr inte haft tid att greja på ett tag, dygnet har för lite timmar.
Men vad är det för oönskade effekter?
Vad den gör är ju bara att slå upp unopin# till port och bit...
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf

#454 » 00:45:35, 21-02-2017
  • Överför markerat ord till lexikonet

Jag har fått igång ett litet test. Vid varje puls så togglar jag pinne 13. Jag fick lägga in en delay i setup, innan jag initierar int0. Annars klarar den inte av att läsa, det verkar som om det är något hyss efter setup(). Bara den kommer igång så funkar det, inga problem med 6000rpm. Kikar vidare så smått.
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Ulf

#455 » 00:56:11, 21-02-2017
  • Överför markerat ord till lexikonet

Ahh, hittade lite... Globala interrupt är på från början. Första raden i setup är nu cli() och sista sei().
Förut så fick jag gå ner rejält i varv och hålla tummen. Nu är det inga problem med start på 8000rpm.
Overkill kanske men det är bara ett mått på hur den funkar.
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Janson1 (trådstartaren)

#456 » 08:01:42, 21-02-2017
  • Överför markerat ord till lexikonet

Ulf: vill du förtydliga lite med cli() och sei(), var dom är/skall vara mm.
Janson1
Fler än 500 inlägg
 
Blev medlem: 12:50:52, 21-03-2010
Ort: Mark Västra Götaland
Sverige
Maskintyp: Grävmaskin (larvburen)
Maskin: Bobcat X125 (2.5 ton)
Case CK-15 (Kubota kx41)
+ div. flygplan, helikoptrar
Senaste renoveringsobjekten:
Piper PA-24 Comanche från -64 (flyger nu)
Ferguson Grålle/VW diesel 1952/2002 (rullar nu)
10 Kw solcellsanläggning som surrar och går.
Försöka få till ett Ö-drift elsystem utifall att...

Ulf

#457 » 09:29:12, 21-02-2017
  • Överför markerat ord till lexikonet

Det jag håller på med är att från grunden få interrupt att fungera, för att sedan lägga på delar allt
eftersom.
Förut hade jag följande i min setup:
Kod: Markera allt
void setup() {
  setup_AD();
  setup_INT0();
  pinMode(13,OUTPUT);
  digitalHigh(13)

  sei(); //Globala interrupt på
}


Det visar sig att globala interrupt redan är påslaget, så jag gjorde följande:
Kod: Markera allt
void setup() {
  cli();  //Globala interrupt av
  setup_AD();
  setup_INT0();
  pinMode(13,OUTPUT);
  digitalHigh(13); // LED för att indikera att det gått bra hitills

  sei(); //Globala interrupt på
}


Annars kan det hända att ISR:en anropas innan du har hunnit ur setup().
Slå på interrupt kanske kan vara det första som görs i loop(), fast det är inte riktigt bra...
Men i långa loppet så kanske det är bättre att gå över till en annan miljö. Jag är inte helt hundra på vad man slå av från arduino-miljön. Det enda som behöver användas är ju micros(). Fast den behöver kanske göras mer precis, jag tror precisionen är 4uS på den original.

Sedan har jag gjort om så att Serial.begin(...) anropas först i PANIC(...).
Detta för att jag inte ska störas av en print någon annanstans.
Tanken med PANIC är att den förutom orsak även ska rapportera status på systemet, då kanske man kan utröna vad som är galet.
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Janson1 (trådstartaren)

#458 » 23:46:12, 21-02-2017
  • Överför markerat ord till lexikonet

Ja, nu är jag nog inte riktigt med vad som egentligen händer i chippet...
INT0 kan ju vara: ingång 0, aktivera interrupt?
Detta är nog lite överkurs innan jag hunnit med lektionen hos 3D-Baron.
Men Ulf: kan du förklara på ett pedagogiskt sätt vad som händer och gärna varför.
Janson1
Fler än 500 inlägg
 
Blev medlem: 12:50:52, 21-03-2010
Ort: Mark Västra Götaland
Sverige
Maskintyp: Grävmaskin (larvburen)
Maskin: Bobcat X125 (2.5 ton)
Case CK-15 (Kubota kx41)
+ div. flygplan, helikoptrar
Senaste renoveringsobjekten:
Piper PA-24 Comanche från -64 (flyger nu)
Ferguson Grålle/VW diesel 1952/2002 (rullar nu)
10 Kw solcellsanläggning som surrar och går.
Försöka få till ett Ö-drift elsystem utifall att...

Ulf

#459 » 10:30:40, 22-02-2017
  • Överför markerat ord till lexikonet

Internet försvann hemma lagom till Lilla M's nannadags...

Koden i mitt förra inlägg är sk pseudokod, dvs kod som inte nödvändigtvis behöver fungera, den bara visar en princip. Semikolon och annat kan saknas.

Jag ska försöka ta det steg för steg.
Koden, det finns en hantering i loop-funktionen som i sig är ointressant för att beskriva det här.
Men vad den gör är att hämta ett värde och släcka en flagga, i princip.
ISR rutinen gör det motsatta, sätter en flagga och sätter en tid i en variabel, om flaggan är satt så anropas PANIC().
Kod: Markera allt
void setup() {
  setup_INT0();
  pinMode(13,OUTPUT);
  digitalHigh(13);

  sei(); //Globala interrupt på
}


Kod: Markera allt
  setup_INT0();

Här sätts alla register osv så att hw-interrupt INT_0 (pinne 2) ska fungera.
Sedan gör vi lite initiala saker som oxå tar tid
Kod: Markera allt
  pinMode(13,OUTPUT);
  digitalHigh(13);

Jag testade även att ta bort dessa rader, det blev kanske något bättre, men inte alls bra!

Och till sist slår vi på globala interrupt
Kod: Markera allt
  sei(); //Globala interrupt på


Problemet är att den sista funktionen inte har någon inverkan då globala interrupt redan är på.
Och därmed kommer, ISR:en (Interrupt Service Routine) att kunna anropas redan innan vi var lämnat setup_INT0(), dvs även innan vi har hamnat i loop- funktionen. En gång är inget problem, men händer det två så har inte flaggan släckts.

Jag vet inte om Arduinon har en massa hyss för sig innan setup() och/eller innan loop(), troligen, så att det är därför det blir som det blir.
Men om vi stänger av globala interrupt det första vi gör så borde det iaf bli bättre. cli() i andra kodsnutten i förra inlägget!

Det blir iaf så pass bra att är pulsgeneratorn inställd på 8000rpm så missas bara en av femtio omstarter av den andra Unon, mot förut ca en på trettio som gick bra vid 800rpm! Och en start med pangpå 8000rpm lär väl aldrig ske!

E'du'me?
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Towil

#460 » 11:07:47, 22-02-2017
  • Överför markerat ord till lexikonet

Att blanda AVR och arduino när det kommer till interrupt och timers kan det bli konflikter.
Varför inte använda arduinos interrupt funktion attachInterrupt().

Att börja blanda in massa AVR in arduino koden är en stor potential för att man får massa olika konstiga fel. Arduino begränsar funktioner och gör en massa fasta val för att det skall vara enklare att programmera.
Fundera på att gör vägvalet nu, antingen köra arduino eller byt till AVR.
Eller byt till en snabbare MCU.
Användarvisningsbild
Towil
Moderator
Moderator
 
Blev medlem: 20:00:40, 18-08-2007
Ort: Nybro
Sverige

Ulf

#461 » 13:09:35, 22-02-2017
  • Överför markerat ord till lexikonet

Detta problem får man oavsett om man använder attachInterrupt() eller inte.
Men jag tror på sikt att det är läge att köra ren AVR, det blir rappare. Men som jag uppfattar det så är TS ganska grön på C/C++-programmering, och att då börja med AVR-miljön, med inslag av AVR där det går, gör det lättare för honom att sedan gå över till ren AVR. Eller om det funkar helt i Arduino-miljön.

Jag har inte haft tiden att pilla ihop en avr-gcc miljö än för att testa. Att få till lib etc som funkar i båda är ju inte fel. Det är ju så man gör för programvara som ska fungera på olika plattformar.

Och vill man ha en mer portabel kod för sei() och cli() så är det redan
Kod: Markera allt
#define interrupts() sei()
#define noInterrupts() cli()

gäller iaf för Unon.

Såg förresten (hittare den inte nu) där man i gjorde #undef på main och använde sin egen.
Jag har inte testat, men det verkar spännande....
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Towil

#462 » 15:13:59, 22-02-2017
  • Överför markerat ord till lexikonet

I Arduino om jag inte mins fel är pin interrupten dynamiska så du kan slå av och på dem när du vill i koden. Samt att de bara fungerar på pin 2,3 på UNO. Så de är troligen redan satta från börjar vare sig man använder dem eller inte.
I AVR kan du få interrupt på de flesta pinnar i varierande grad.

https://www.arduino.cc/en/Reference/AttachInterrupt
https://www.arduino.cc/en/Reference/DetachInterrupt
Användarvisningsbild
Towil
Moderator
Moderator
 
Blev medlem: 20:00:40, 18-08-2007
Ort: Nybro
Sverige

Ulf

#463 » 16:17:39, 22-02-2017
  • Överför markerat ord till lexikonet

Det stämmer, det är en array med void(*fptr)(void) som fylls på rätt position (pin#) samtidigt sätts i rätt register att denna pinne ska reagera.

Förresten, nu har jag installerat emacs på den ena raspberryn hemma!
Nu får vi se vilka tangentkombinationer som sitter i ryggmärgen! Det är åtta år sedan jag använde emacs på heltid. Och jag använde den dagligen under 14-15 år! Något borde ju finnas i ryggmärgen...
Kommer du med problem, eller är du en del av det?
Användarvisningsbild
Ulf
Fler än 500 inlägg
 
Blev medlem: 16:04:18, 05-03-2004
Ort: Kil
Maskintyp: Traktor
Maskin: Nuffield 460 -61

Janson1 (trådstartaren)

#464 » 23:20:07, 22-02-2017
  • Överför markerat ord till lexikonet

BTW, jag fick hem en Arduino Nano i går och den har 2 till analoga ingångar (totalt 8 st istället för 6 st i UNO:n) vilket skulle passa mig bättre... Men, jag funderar på det här med interrupt. Kommer det att behövas? Det finns bara kända signaler med kända tider, som minsta tid ca 240 microsek vid fullt skaft.
Om man nu låter Arduinon göra 1: läsa ett analogt värde eller två, vänta in puls, räkna upp. 2: läsa nästa analoga värde/värden, vänta in puls, räkna upp, räkna ut pulstid i micros, läsa nytt analogvärde/värden, vänta in puls, räkna upp, räkna ut pulstid i micros, Sätta rätt spridare, vänta på puls, räkna upp osv. tills tex puls 20 är räknad, aktivera spridare, vänta på puls, räkna upp, när rätt puls är räknad, stäng av spridare, osv.
Med ett smart flöde och 10-15 olika fall så har den ju tuggat igenom hela programmet och lägger sig sen i vänt för nästa puls (från vevaxeln).
Är detta en omöjlig programmeringsuppgift?
Janson1
Fler än 500 inlägg
 
Blev medlem: 12:50:52, 21-03-2010
Ort: Mark Västra Götaland
Sverige
Maskintyp: Grävmaskin (larvburen)
Maskin: Bobcat X125 (2.5 ton)
Case CK-15 (Kubota kx41)
+ div. flygplan, helikoptrar
Senaste renoveringsobjekten:
Piper PA-24 Comanche från -64 (flyger nu)
Ferguson Grålle/VW diesel 1952/2002 (rullar nu)
10 Kw solcellsanläggning som surrar och går.
Försöka få till ett Ö-drift elsystem utifall att...

Janson1 (trådstartaren)

#465 » 23:24:24, 22-02-2017
  • Överför markerat ord till lexikonet

Skall väl tillägga som ni redan gissat, jag är helt ny på detta med programmering. Jag har ju börjat i Arduinos gratismiljö och försöker förstå vd som händer där. Nu klarar ju denna miljö även C/C++ programmering fast då förstår jag mindre av vad som egentligen händer...
Så, om det är möjligt så vill jag gärna vara kvar i Arduinon så länge det finns hopp om att lyckas där.
Janson1
Fler än 500 inlägg
 
Blev medlem: 12:50:52, 21-03-2010
Ort: Mark Västra Götaland
Sverige
Maskintyp: Grävmaskin (larvburen)
Maskin: Bobcat X125 (2.5 ton)
Case CK-15 (Kubota kx41)
+ div. flygplan, helikoptrar
Senaste renoveringsobjekten:
Piper PA-24 Comanche från -64 (flyger nu)
Ferguson Grålle/VW diesel 1952/2002 (rullar nu)
10 Kw solcellsanläggning som surrar och går.
Försöka få till ett Ö-drift elsystem utifall att...


Återgå till [Allmänt] El/elektronik

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 6 gäster



Älmeboda Maskinservice

OilQuick

TK Traktordelar

Klaravik

Crazyride

Bra Verktyg

Motrab

Engcon

Scandcut

Astrak

Olsson Parts

Nya och begagnade
truckar på vstruck.se