Arduino + NO brytare + LEDs?
- Klas-Kenny
- Inlägg: 11840
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino + NO brytare + LEDs?
Ang. Hur ofta man behöva läsa av ingången så är väl det bästa att köra den när man öppnar dörren, för vad jag förstod så skulle det blinka istället för att lysa när man öppnar dörren bara. Det finns ju ingen anledning att kolla ingången massor av gånger när det inte spelar någon roll. Då slipper man dessutom ha någon tickande timer när man lagt processorn i sleep, räcker ju att den vaknar av att man öppnar dörren.
Re: Arduino + NO brytare + LEDs?
dock blir det en fördröjning om man ska lyckas väcka den efter sömn. Och den fördröjningen kan vara ack så jobbig om man ska ha nycklar snabbt..
Jag skippar kontrollen av batteriets status i detta projekt. Men om nån kan hjäälpa mig utveckla en kod så att arduinon går i sleep läge hade det vart guld. Är som sagt väldigt novis på detta.
Jag skippar kontrollen av batteriets status i detta projekt. Men om nån kan hjäälpa mig utveckla en kod så att arduinon går i sleep läge hade det vart guld. Är som sagt väldigt novis på detta.
Re: Arduino + NO brytare + LEDs?
> dock blir det en fördröjning om man ska lyckas väcka den efter sömn.
Vad tar det för en AVR att "vakna", några (tiotals) millisekunder kanske?
Vad tar det för en AVR att "vakna", några (tiotals) millisekunder kanske?
Re: Arduino + NO brytare + LEDs?
AVR? Vad är det?
Det enda jag kunnat testa är att liksom döda den med spänningen och då tar kanske en sekund för den att vakna och tända LEDen. Men det kanske inte är så det är tänkt? För om man använder strömbrytarn för att bryta inkommande spänning till arduinon så står man ju där med den här jobbiga sekunden innan lampan tänds. Det tycker iallfall jag är oerhört irriterande. Jag vill att LEDen ska tändas mer eller mindre direkt.
Det enda jag kunnat testa är att liksom döda den med spänningen och då tar kanske en sekund för den att vakna och tända LEDen. Men det kanske inte är så det är tänkt? För om man använder strömbrytarn för att bryta inkommande spänning till arduinon så står man ju där med den här jobbiga sekunden innan lampan tänds. Det tycker iallfall jag är oerhört irriterande. Jag vill att LEDen ska tändas mer eller mindre direkt.
Re: Arduino + NO brytare + LEDs?
Det är Arduinons bootloader som tar tid, processorn i sig vaknar på ett halvt ögonblick.
Tror jag läst att bootloadern väntar ca 500 ms för att se om det kommer in programmeringskommandon på serieporten.
Vill man slippa den fördröjningen får man flasha om kretsen med en egen bootloader.
Eller i detta fall skulle elektroniken för LED-styrningen kunna göras "omvänd", LEDen tänds direkt av hårdvaran och är på tills processorn aktivt släcker/dimmar den.
Tror jag läst att bootloadern väntar ca 500 ms för att se om det kommer in programmeringskommandon på serieporten.
Vill man slippa den fördröjningen får man flasha om kretsen med en egen bootloader.
Eller i detta fall skulle elektroniken för LED-styrningen kunna göras "omvänd", LEDen tänds direkt av hårdvaran och är på tills processorn aktivt släcker/dimmar den.
Re: Arduino + NO brytare + LEDs?
AVR är den typ av processor som sitter i Arduinon. Dvs. en ATmegaXXX nånting.
>Vill man slippa den fördröjningen får man flasha om kretsen ...
Men hallå!
Processorn går ju inte i bootloader-läge bara för att man sätter den i sleep-mode.
Det går precis lika fort för den att vakna som för vilken AVR som helst.
Exempelvis så tar det för ATmega328P max 65ms start-up tid.
(hmm bläddrar i databladet ... hmmm sidan 38 - sleep modes ... ser här att man kan väcka den ur "POWER DOWN" med INT0 och INT1 och "pin change" ... bra.... power down är antagligen den långsammaste att få igång igen... bläddrar ....
If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up. The MCU is then halted for
four cycles in addition to the start-up time, executes the interrupt routine, and resumes execution from the instruction following SLEEP. The contents of the Register File and SRAM are unaltered when the device wakes up from
sleep. If a reset occurs during sleep mode, the MCU wakes up and executes from the Reset Vector.
OK..... bläddrar ...
Note that if a level triggered interrupt is used for wake-up from Power-down, the required level must be held long
enough for the MCU to complete the wake-up to trigger the level interrupt. If the level disappears before the end of the
Start-up Time, the MCU will still wake up, but no interrupt will be generated.
...
When waking up from Power-down mode, there is a delay from the wake-up condition occurs until the wake-up
becomes effective. This allows the clock to restart and become stable after having been stopped. The wake-up
period is defined by the same CKSEL Fuses that define the Reset Time-out period, as described in ”Clock
Sources” on page 27. )
OK... så det beror på vilken inställning Arduino använder för klockan, men max tid för uppstart är ca 65ms... dvs 0.065 sek. Orkar man inte vänta så länge så kan man använda en annan "sleep-mode" där klockan inte stängs ner - då tar det bara några enstaka programcykler (någon miljondels sekund) att starta upp.
Jag programmerar inte Arduino själv, men sleep-koden bör vara väldigt enkel att fixa. (Förutsatt att man programmeringens grunder, annars kan vad som helst bli svårt). Här en liten vägledning: Sleeping Arduino - Part 2 Wake Up Via An External Interrupt. (Det är kanske lämpligt att läsa Part 1 först)
>Vill man slippa den fördröjningen får man flasha om kretsen ...
Men hallå!
Processorn går ju inte i bootloader-läge bara för att man sätter den i sleep-mode.
Det går precis lika fort för den att vakna som för vilken AVR som helst.
Exempelvis så tar det för ATmega328P max 65ms start-up tid.
(hmm bläddrar i databladet ... hmmm sidan 38 - sleep modes ... ser här att man kan väcka den ur "POWER DOWN" med INT0 och INT1 och "pin change" ... bra.... power down är antagligen den långsammaste att få igång igen... bläddrar ....
If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up. The MCU is then halted for
four cycles in addition to the start-up time, executes the interrupt routine, and resumes execution from the instruction following SLEEP. The contents of the Register File and SRAM are unaltered when the device wakes up from
sleep. If a reset occurs during sleep mode, the MCU wakes up and executes from the Reset Vector.
OK..... bläddrar ...
Note that if a level triggered interrupt is used for wake-up from Power-down, the required level must be held long
enough for the MCU to complete the wake-up to trigger the level interrupt. If the level disappears before the end of the
Start-up Time, the MCU will still wake up, but no interrupt will be generated.
...
When waking up from Power-down mode, there is a delay from the wake-up condition occurs until the wake-up
becomes effective. This allows the clock to restart and become stable after having been stopped. The wake-up
period is defined by the same CKSEL Fuses that define the Reset Time-out period, as described in ”Clock
Sources” on page 27. )
OK... så det beror på vilken inställning Arduino använder för klockan, men max tid för uppstart är ca 65ms... dvs 0.065 sek. Orkar man inte vänta så länge så kan man använda en annan "sleep-mode" där klockan inte stängs ner - då tar det bara några enstaka programcykler (någon miljondels sekund) att starta upp.
Jag programmerar inte Arduino själv, men sleep-koden bör vara väldigt enkel att fixa. (Förutsatt att man programmeringens grunder, annars kan vad som helst bli svårt). Här en liten vägledning: Sleeping Arduino - Part 2 Wake Up Via An External Interrupt. (Det är kanske lämpligt att läsa Part 1 först)
Re: Arduino + NO brytare + LEDs?
Han menar att den måste flashas om för att slippa fördröjning vid uppstart om man kör varianten där man låter brytaren slå av och på matningen.
Re: Arduino + NO brytare + LEDs?
AVR är processorn som arduinon är uppbyggd av. Mer exakt AVR328.
Läs mer här: http://arduino.cc/en/Main/Hardware
Att väcka en processor från SLEEP är inte samma sak som att starta efter man har brutit strömmen till den. Det som tar tid vid en kallstart är som sagt bootloadern. Bootloadern är ett litet program som finns i processorn som gör att du kan ladda upp dina program via USB.
Läs mer här: http://arduino.cc/en/Hacking/Bootloader
Man kan skippa bootloadern om man flashar in ditt arduinoprogram via ISP istället.
Läs Mer här: http://arduino.cc/en/Hacking/Programmer
Och här:http://arduino.cc/en/Tutorial/ArduinoISP/
Det finns också en no-wait bootloader man kan använda också:
http://www.ladyada.net/library/arduino/bootloader.html
Men ett annat alternativ är som Wedge sa att göra LED-styrningen omvänd.
Då matar du dina LEDs med + och sätter - till en I/O på arduinon. För att tända dina LEDs så sätter du pinnen låg istället för hög. På detta sätt så lyser LEDsen från start även innan processorn har startat. Men då måste du också ändra i programmet för analogWrite(0) är nu fullt tänd och analogWrite(255) är helt släckt.... alltså omkastat....
Läs mer här: http://arduino.cc/en/Main/Hardware
Att väcka en processor från SLEEP är inte samma sak som att starta efter man har brutit strömmen till den. Det som tar tid vid en kallstart är som sagt bootloadern. Bootloadern är ett litet program som finns i processorn som gör att du kan ladda upp dina program via USB.
Läs mer här: http://arduino.cc/en/Hacking/Bootloader
Man kan skippa bootloadern om man flashar in ditt arduinoprogram via ISP istället.
Läs Mer här: http://arduino.cc/en/Hacking/Programmer
Och här:http://arduino.cc/en/Tutorial/ArduinoISP/
Det finns också en no-wait bootloader man kan använda också:
http://www.ladyada.net/library/arduino/bootloader.html
Men ett annat alternativ är som Wedge sa att göra LED-styrningen omvänd.
Då matar du dina LEDs med + och sätter - till en I/O på arduinon. För att tända dina LEDs så sätter du pinnen låg istället för hög. På detta sätt så lyser LEDsen från start även innan processorn har startat. Men då måste du också ändra i programmet för analogWrite(0) är nu fullt tänd och analogWrite(255) är helt släckt.... alltså omkastat....
Re: Arduino + NO brytare + LEDs?
OK, jag var lite för snabb där. Jag trodde vi prarade om sleep-mode....sneaky skrev:Han menar att den måste flashas om för att slippa fördröjning vid uppstart om man kör varianten där man låter brytaren slå av och på matningen.
jolerius skrev:om nån kan hjäälpa mig utveckla en kod så att arduinon går i sleep läge hade det vart guld.
Re: Arduino + NO brytare + LEDs?
Nä, inte riktigt. Pinnen sätts som standard till input (utan intern pullup) vid reset, och det spelar då ingen roll om man vänder LEDen si eller så.Bosen skrev:Men ett annat alternativ är som Wedge sa att göra LED-styrningen omvänd.
Då matar du dina LEDs med + och sätter - till en I/O på arduinon. För att tända dina LEDs så sätter du pinnen låg istället för hög. På detta sätt så lyser LEDsen från start även innan processorn har startat. Men då måste du också ändra i programmet för analogWrite(0) är nu fullt tänd och analogWrite(255) är helt släckt.... alltså omkastat....
Man får ta hjälp av en transistor till att driva LEDen, och låta den få basström direkt från matningsspänningen. Lägg ett extern pullupmotstånd på I/O-pinnen bara, så driver det basström tills I/O-pinnen blir utgång och tar över styrningen. Programlogiken blir densamma, det är bara LED-drivningen som blir lite "omvänd", den tänder LEDen direkt utan att pinnen behöver initieras först.
Re: Arduino + NO brytare + LEDs?
Wedge skrev:Nä, inte riktigt. Pinnen sätts som standard till input (utan intern pullup) vid reset, och det spelar då ingen roll om man vänder LEDen si eller så.Bosen skrev:Men ett annat alternativ är som Wedge sa att göra LED-styrningen omvänd.
Då matar du dina LEDs med + och sätter - till en I/O på arduinon. För att tända dina LEDs så sätter du pinnen låg istället för hög. På detta sätt så lyser LEDsen från start även innan processorn har startat. Men då måste du också ändra i programmet för analogWrite(0) är nu fullt tänd och analogWrite(255) är helt släckt.... alltså omkastat....
Man får ta hjälp av en transistor till att driva LEDen, och låta den få basström direkt från matningsspänningen. Lägg ett extern pullupmotstånd på I/O-pinnen bara, så driver det basström tills I/O-pinnen blir utgång och tar över styrningen. Programlogiken blir densamma, det är bara LED-drivningen som blir lite "omvänd", den tänder LEDen direkt utan att pinnen behöver initieras först.
Har du lust att rita upp lite hur du har tänkt? Någon som kan hinta mig om lite hjälp med koden så att jag kan använda ett sleepmode.
Anledningen att jag måste styra den med batteri är avsaknaden av möjlighet att dra el till den däör nyckelskåpet ska vara. Så jag uppskattar hjärtligt all form av hjälp jag kan få???
Re: Arduino + NO brytare + LEDs?
> Någon som kan hinta mig om lite hjälp med koden så att jag kan använda ett sleepmode.
Du har fått en länk till en sida med massor av hintar och rena kodexempel.
http://arduino.cc/playground/Learning/ArduinoSleepCode.
Men en annan lösning är ju (som har sagts) att bryta spänningen helt
till Arduinon när dörren är stängd. Då faller "sleep" bort helt.
Du har fått en länk till en sida med massor av hintar och rena kodexempel.
http://arduino.cc/playground/Learning/ArduinoSleepCode.
Men en annan lösning är ju (som har sagts) att bryta spänningen helt
till Arduinon när dörren är stängd. Då faller "sleep" bort helt.
Re: Arduino + NO brytare + LEDs?
bryta spänningen vill jag inte göra då mina erfarenheter av det gör att arduinon tar alldeles för lång tid på sig innan lampan är tänd. Men om du kan förklara för mig ur jag ska göra för att få den lite mer direkt. På ett enkelt sättså är jag absolut öppen för idéer
Re: Arduino + NO brytare + LEDs?
Bosen gav dig ju en bunt länkar om just det. Har du läst dem?