Aliexpress gaat morgen ook uit zn dak.Mr_gadget schreef op vrijdag 23 november 2012 @ 11:09:
Sparkfun.com heeft maandag ook geen verzendkosten! Dus als je Paypal / creditcard hebt kan dat ook interessant zijn.
Vandaag dus bezig geweest met die robotjes.
Het was een kant-en-klaar bouwpakket met een handleiding van 130 pagina's met allemaal codevoorbeelden. Veel werk was het dus niet.
Gebaseerd op een Arduino Mini, en dan met een heleboel randapparatuur (schermpje met Serial ingang, knoppen, IR-sensor, enz.)
Dit samen is inmiddels een robotje geworden, nog 9 dagen om te perfectioneren.
Enkele features (en een filmpje):
• Minder dan 8cm afstand van een object, terug en draaien
• Druk op één vd knoppen aan de zijkant, terug en draaien
• Info op een schermpje
• Een Zwarte lijn volgen
Twee filmpjes:
Niet botsen!
[YouTube: http://www.youtube.com/watch?v=rLVv_FZVi2w]
Volg de lijn:
[YouTube: http://www.youtube.com/watch?v=ne0CPBD8_JA&feature=plcp]
Al met al 6-10 uur werk
Het was een kant-en-klaar bouwpakket met een handleiding van 130 pagina's met allemaal codevoorbeelden. Veel werk was het dus niet.
Gebaseerd op een Arduino Mini, en dan met een heleboel randapparatuur (schermpje met Serial ingang, knoppen, IR-sensor, enz.)
Dit samen is inmiddels een robotje geworden, nog 9 dagen om te perfectioneren.
Enkele features (en een filmpje):
• Minder dan 8cm afstand van een object, terug en draaien
• Druk op één vd knoppen aan de zijkant, terug en draaien
• Info op een schermpje
• Een Zwarte lijn volgen
Twee filmpjes:
Niet botsen!
[YouTube: http://www.youtube.com/watch?v=rLVv_FZVi2w]
Volg de lijn:
[YouTube: http://www.youtube.com/watch?v=ne0CPBD8_JA&feature=plcp]
Al met al 6-10 uur werk
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
cool
Dat kast-probleem kan je verhelpen door een paar distance sensoren aan de zijkanten te plaatsen en op basis van die informatie bepaalt de robot of hij die kant kan op draaien of niet...
Zeker cool
Jammer alleen dat er geen linkje is naar de gebruikte kit.
Jammer alleen dat er geen linkje is naar de gebruikte kit.

Pft ik heb weer is een probleem....
Ik probeer de intensiteit van het backlight van mn LCD te controleren met analogwrite maar het werkt niet
(deel van) mn code:
Maar of ik nou 0, 180, 255, 1337 of wat dan ook doe ik zie geen verschil. Zodra ik de waarde change zie ik hem 1x heel snel "kipperen" (even fel en dan weer gedimt) maar verder niets.
Ik heb het idee dat hij het wel veranderd maar na een paar milisec weer terugzet naar 0 oid. Iemand enig idee waar het aan zou kunnen liggen
Ik probeer de intensiteit van het backlight van mn LCD te controleren met analogwrite maar het werkt niet
(deel van) mn code:
C++:
1
2
3
| int backlightpin = 9; pinMode(backlightpin, OUTPUT); analogWrite(backlightpin, 128); |
Maar of ik nou 0, 180, 255, 1337 of wat dan ook doe ik zie geen verschil. Zodra ik de waarde change zie ik hem 1x heel snel "kipperen" (even fel en dan weer gedimt) maar verder niets.
Ik heb het idee dat hij het wel veranderd maar na een paar milisec weer terugzet naar 0 oid. Iemand enig idee waar het aan zou kunnen liggen
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Heb je wel de PWM poort gepakt? De standaard poort pakt volgens mij enkel LOW of HIGH (0 en 5v aka aan of uit) als waarde.
if (!coffee) {
Work = false; }
Pin 9 is PWM. Desalniettemin zou een andere pin geen kwaad kunnen, mits beschikbaar. En wat gebeurt er als je alleen deze code in de Arduino laadt?
Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done
Dit werkt prima bij mij :
code:
1
2
3
4
5
6
7
| int ledPin = 9; // LED connected to digital pin 9 int fadeValue = 200; // Verander dit getal naar gewenste sterkte. void setup() { } void loop() { analogWrite(ledPin, fadeValue); } |
Hmjaok het zou gewoon moeten werken. In dat geval zal ik het zo eerst ff met een LED testen miss dat er wat in het LCD scherm zit wat het voltage gelijktrekt ofzo
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Ik bedoel ja mijn code zou moeten werken 
Maargoed alleen even een paar regeltjes om het te changen en dat werkt pft ik ga maar even mn code doorspitten maar volgesmij staat er echt niks vreemds in....
Maargoed alleen even een paar regeltjes om het te changen en dat werkt pft ik ga maar even mn code doorspitten maar volgesmij staat er echt niks vreemds in....
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Wat mij opvalt is dat regel 2 in jouw code, in 'mijn' code totaal niet wordt toegepast.
De code heb ik hier vandaan.
Probeer die eens weg te laten ?
De code heb ik hier vandaan.
Probeer die eens weg te laten ?
pft ik heb het al gevonden
stiekem stond ergens in mn code nog "servo.attach(9)"... ja ach dan gaat het niet helemaal werken én een servo én een "led" naja thx in elk geval
Hier heb ik me dus echt een uur op blind zitten staren.... tijd om alle PIN nummertjes in een losse headerfile te zetten.

stiekem stond ergens in mn code nog "servo.attach(9)"... ja ach dan gaat het niet helemaal werken én een servo én een "led" naja thx in elk geval
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Ja dat wil ik ook doen, lage objecten herkent 'ie ook niet, maar die zitten er niet bijalmightyarjen schreef op woensdag 28 november 2012 @ 11:34:
coolDat kast-probleem kan je verhelpen door een paar distance sensoren aan de zijkanten te plaatsen en op basis van die informatie bepaalt de robot of hij die kant kan op draaien of niet...
Ik denk dat ik 'm op de servomotor zet, meegeleverd. Dan kan 'ie rondkijken. (maar niet snel)
Linkje:
http://www.inexglobal.com/products.php?model=popbot
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Gave site F.West, wel een beetje uit de buurt.
Ik heb even zitten kijken hier, maar zie nergens een prijslijst en wil me nog niet registreren daar.
Heb jij de popbot rechtstreeks via hun besteld als ik vragen mag ?
edit:
Inmiddels de max7221 en 2x 4-digit displays binnen gekregen om hier verder te gaan :
Arduino - eigen klok maken
Enige wat nog ontbreekt is de RTC, (real time clock) maar ik kan alvast wat oefenen met een teller ofzo.
Ik snap alleen niet waarom Conrad die onderdelen niet netjes op een kussentje prikt, alsof t niks kost.
Ik heb even zitten kijken hier, maar zie nergens een prijslijst en wil me nog niet registreren daar.
Heb jij de popbot rechtstreeks via hun besteld als ik vragen mag ?
edit:
Inmiddels de max7221 en 2x 4-digit displays binnen gekregen om hier verder te gaan :
Arduino - eigen klok maken
Enige wat nog ontbreekt is de RTC, (real time clock) maar ik kan alvast wat oefenen met een teller ofzo.
Ik snap alleen niet waarom Conrad die onderdelen niet netjes op een kussentje prikt, alsof t niks kost.
[ Voor 51% gewijzigd door kitao op 28-11-2012 17:14 ]
Nee, ik heb dat ding van de RuG gekregen voor een schoolproject (daarvoor moesten we daar naartoe).
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Als je het dan helemaal gaaf wilt maken, dan laat je hem rondkijken waar de meeste ruimte is om naar toe te rijden en vervolgens draait hij z'n chassis in die richting, maar houdt de servomotor de hele tijd in die richting. Zoals een tank zijn loop op een doel houdt terwijl hij draait, geniaalF.West98 schreef op woensdag 28 november 2012 @ 16:00:
[...]
Ja dat wil ik ook doen, lage objecten herkent 'ie ook niet, maar die zitten er niet bij
Ik denk dat ik 'm op de servomotor zet, meegeleverd. Dan kan 'ie rondkijken. (maar niet snel)
Ik heb hier een prog met ethernet shield (w5100) op een uno draaien al enige tijd en nu wil ik datzelfde op een Mega2560 draaien maar dat werkt niet helemaal... iemand die me op weg kan helpen wat aan te passen ? Upload elke 5 minuten waarden naar pvoutput.org en logt iedere minuut naar SD...
Edit : Opgelost, nieuwe versie van MsTimer2 en nu logt ie weer netjes !
Edit : Opgelost, nieuwe versie van MsTimer2 en nu logt ie weer netjes !
[ Voor 11% gewijzigd door reddo op 02-12-2012 22:01 ]
Kost me teveel codealmightyarjen schreef op woensdag 28 november 2012 @ 17:14:
[...]
Als je het dan helemaal gaaf wilt maken, dan laat je hem rondkijken waar de meeste ruimte is om naar toe te rijden en vervolgens draait hij z'n chassis in die richting, maar houdt de servomotor de hele tijd in die richting. Zoals een tank zijn loop op een doel houdt terwijl hij draait, geniaal
En dat maakt hem weer wat traag, de afstandmeter is al traag. Er komen nog genoeg andere dingen bij overigens
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Hallo medeTweakers!
Ik wil gaan beginnen met arduino, zou iemand mij kunnen uitleggen/ vertellen wat ik hier allemaal voor nodig heb? ik beschik over genoeg led lampjes schakelaartjes ect.
onder welke taal moet het script worden geschreven?
Groetjes Dizzy
Ik wil gaan beginnen met arduino, zou iemand mij kunnen uitleggen/ vertellen wat ik hier allemaal voor nodig heb? ik beschik over genoeg led lampjes schakelaartjes ect.
onder welke taal moet het script worden geschreven?
Groetjes Dizzy
Hi Dizzy01,
Het enige wat je dan nog nodig hebt is een leverancier die jou een arduino-bordje kan leveren en een usb-kabeltje.
Verder zijn er diverse arduino's zoals uno, mega, tiny, leonardo, etc en de progtaal is c of c++ heb ik begrepen.
Dit is bijvoorbeeld een leverancier en de hoofdpagina van arduino :
http://www.antratek.nl/Arduino.html
http://www.arduino.cc/
Lees dat eens door en kijk welk type jij wil gaan gebruiken.
Het enige wat je dan nog nodig hebt is een leverancier die jou een arduino-bordje kan leveren en een usb-kabeltje.
Verder zijn er diverse arduino's zoals uno, mega, tiny, leonardo, etc en de progtaal is c of c++ heb ik begrepen.
Dit is bijvoorbeeld een leverancier en de hoofdpagina van arduino :
http://www.antratek.nl/Arduino.html
http://www.arduino.cc/
Lees dat eens door en kijk welk type jij wil gaan gebruiken.
Ik heb deze besteld. Hij was afgelopen zaterdag al binnen en ik kan je melden dat het een zeer uitgebreide set is. Ik heb er ook wat extra breadboard jumper cables bijbesteld, dat is wel een aanrader.
Verder nog niet heel veel mee gedaan. Eerste projectje was een knightrider looplicht, met een instelbare snelheid (door de variabele weerstand) en een 7 segment display die aangeeft welke led er brand.
"Superstoer", aldus mijn dochter, die nu denkt dat ik geniaal ben
Vijf minuten later vroeg ze wat je hier eigenlijk aan had...
[ Voor 5% gewijzigd door sopsop op 03-12-2012 10:23 ]
Oh Nice! Ik heb deze ook gisteravond besteld. Ik ga zo even extra breadboard jumper cables bestellen.
THX allemaal
THX allemaal
Hier kan je 500 jumpers van maken van 20 cm.
Nadeel, 1 kleur.
http://www.eleshop.nl/breadboard-draad-rood-100m-p-230.html
Maar ik heb nu iets van 100 draden op een breadboard zitten en dan maakt de kleur ook nog maar weinig uit. Ik kon enkel blij zijn dat ik nog draad had liggen want de jumpers waren allang op.
Nadeel, 1 kleur.
http://www.eleshop.nl/breadboard-draad-rood-100m-p-230.html
Maar ik heb nu iets van 100 draden op een breadboard zitten en dan maakt de kleur ook nog maar weinig uit. Ik kon enkel blij zijn dat ik nog draad had liggen want de jumpers waren allang op.

Ik heb een NXT motor van Lego die ik aanstuur via een microcontroller (ATmega (arduino)). In deze motor zit een rotary encoder en zorgt voor een interrupt bij elke puls (één puls per graad). Het probleem met die motor is dat die door de bewegende massa nog een stukje doordraait zodra hij het stopcommando heeft gekregen. Ik ben dit probleem aan het oplossen en had het volgende bedacht:
1. linksom draaien voor x graden
2. bij x graden stopcommando
3. heel kort rechtsom commando geven (extra remkracht)
4. eindpositie opzoeken dmv de PWM op te voeren en zodra de as begint te draaien de PWM stabiel houden totdat de eindpositie is bereikt.
Tot en met punt 3 werkt het goed, al draait de motor nog te ver door. Het probleem waar ik tegenaan loop is dat de code de hele tijd wordt verstoord omdat er de hele tijd interrupts binnenkomen omdat de motor nog uitdraait. Interrupts kan ik niet tijdelijk uitzetten, dan mis je pulsen en weet je niet wat de exacte positie is. Ik heb al het één en ander geprobeerd om met booleans de situatie aan te geven e.d., maar ik krijg het niet werkend. Heeft iemand nog een gouden tip hoe ik dit kan oplossen?
edit: Sjeez Kitao, wat een dradenbende
1. linksom draaien voor x graden
2. bij x graden stopcommando
3. heel kort rechtsom commando geven (extra remkracht)
4. eindpositie opzoeken dmv de PWM op te voeren en zodra de as begint te draaien de PWM stabiel houden totdat de eindpositie is bereikt.
Tot en met punt 3 werkt het goed, al draait de motor nog te ver door. Het probleem waar ik tegenaan loop is dat de code de hele tijd wordt verstoord omdat er de hele tijd interrupts binnenkomen omdat de motor nog uitdraait. Interrupts kan ik niet tijdelijk uitzetten, dan mis je pulsen en weet je niet wat de exacte positie is. Ik heb al het één en ander geprobeerd om met booleans de situatie aan te geven e.d., maar ik krijg het niet werkend. Heeft iemand nog een gouden tip hoe ik dit kan oplossen?
edit: Sjeez Kitao, wat een dradenbende
Verwijderd
Ik heb een probleem met mijn arduino nano,
als ik een programma upload naar de arduino dan krijg ik geen foutmeldingen. gewoon done uploading.
Op de arduino knippert tijdens het uploaden de RX led 3 keer, en daarna gebeurt er niks meer. Het programma wat ik upload naar de nano wordt ook niet uitgevoerd.
Het is een nieuwe arduino die ik nog nooit eerder heb gebruikt. Arduino uno's die ik heb werken wel gewoon.
serial port en board zijn goed ingesteld. Alleen in de device manager staat er bij de nano: USB serial port (COM 4) terwijl er bij een uno echt arduino staat.
Heeft iemand ervaring met arduino nano's?
als ik een programma upload naar de arduino dan krijg ik geen foutmeldingen. gewoon done uploading.
Op de arduino knippert tijdens het uploaden de RX led 3 keer, en daarna gebeurt er niks meer. Het programma wat ik upload naar de nano wordt ook niet uitgevoerd.
Het is een nieuwe arduino die ik nog nooit eerder heb gebruikt. Arduino uno's die ik heb werken wel gewoon.
serial port en board zijn goed ingesteld. Alleen in de device manager staat er bij de nano: USB serial port (COM 4) terwijl er bij een uno echt arduino staat.
Heeft iemand ervaring met arduino nano's?
Een nano heeft een andere USB-to-Serial chip, dus dat'ie een andere naam heeft kan goed kloppen. Heb je ook het goeie board geselecteerd in je arduino IDE?
Wat je anders nog zou kunnen doen is de bootloader flashen. Dan weet je zeker dat die goed is.
Hier staat uitgelegd hoe dat moet: http://arduino.cc/en/Tutorial/ArduinoISP
-edit-
weet je zeker dat het niet de pin 13 led is die 3x knippert? Die hoort namelijk 3x te knipperen na een reset.
-edit2-
en probeer altijd eerst een keer gewoon het standaard blink-programma'tje te uploaden en kijk of dat wel goed gaat.
Wat je anders nog zou kunnen doen is de bootloader flashen. Dan weet je zeker dat die goed is.
Hier staat uitgelegd hoe dat moet: http://arduino.cc/en/Tutorial/ArduinoISP
-edit-
weet je zeker dat het niet de pin 13 led is die 3x knippert? Die hoort namelijk 3x te knipperen na een reset.
-edit2-
en probeer altijd eerst een keer gewoon het standaard blink-programma'tje te uploaden en kijk of dat wel goed gaat.
[ Voor 27% gewijzigd door mcDavid op 03-12-2012 12:54 ]
Je kan proberen een soort van PID controller hiervoor te maken. Op wikipedia staat hiervoor een voorbeeld. Maar als het echt ligt aan de arduino dan zou je de interrupts door een externe processor moeten laten afhandelen (of een snellere arduino kopen). Ik ga zelf binnenkort proberen de encoders van oude balmuizen te gebruiken. De chip die over de PS/2 port praat kan ook met een arduino praten en die handelt dan de intererrupts af.almightyarjen schreef op maandag 03 december 2012 @ 11:51:
Ik heb een NXT motor van Lego die ik aanstuur via een microcontroller (ATmega (arduino)). In deze motor zit een rotary encoder en zorgt voor een interrupt bij elke puls (één puls per graad). Het probleem met die motor is dat die door de bewegende massa nog een stukje doordraait zodra hij het stopcommando heeft gekregen. Ik ben dit probleem aan het oplossen en had het volgende bedacht:
1. linksom draaien voor x graden
2. bij x graden stopcommando
3. heel kort rechtsom commando geven (extra remkracht)
4. eindpositie opzoeken dmv de PWM op te voeren en zodra de as begint te draaien de PWM stabiel houden totdat de eindpositie is bereikt.
Tot en met punt 3 werkt het goed, al draait de motor nog te ver door. Het probleem waar ik tegenaan loop is dat de code de hele tijd wordt verstoord omdat er de hele tijd interrupts binnenkomen omdat de motor nog uitdraait. Interrupts kan ik niet tijdelijk uitzetten, dan mis je pulsen en weet je niet wat de exacte positie is. Ik heb al het één en ander geprobeerd om met booleans de situatie aan te geven e.d., maar ik krijg het niet werkend. Heeft iemand nog een gouden tip hoe ik dit kan oplossen?
Enige wat die interrupt dus hoeft te doen is wat stuff opslaan van huidige state, een register eentje ophogen, en weer verder gaan. Lijkt me niet dat dat een probleem kan geven eigenlijk.
Verwijderd
ik heb ook het goede board gekozen in mijn IDE. het is zeker de RX led die 3 keer knippert, hij knippert ook veel trager als de led op pin 13 die 3 X knippert na een reset.mcDavid schreef op maandag 03 december 2012 @ 12:48:
Een nano heeft een andere USB-to-Serial chip, dus dat'ie een andere naam heeft kan goed kloppen. Heb je ook het goeie board geselecteerd in je arduino IDE?
Wat je anders nog zou kunnen doen is de bootloader flashen. Dan weet je zeker dat die goed is.
Hier staat uitgelegd hoe dat moet: http://arduino.cc/en/Tutorial/ArduinoISP
-edit-
weet je zeker dat het niet de pin 13 led is die 3x knippert? Die hoort namelijk 3x te knipperen na een reset.
-edit2-
en probeer altijd eerst een keer gewoon het standaard blink-programma'tje te uploaden en kijk of dat wel goed gaat.
ik probeer inderdaad om blink te uploaden naar de arduino.
Ook de bootloader flashen lijkt weinig verschil te maken, maar ik weet niet precies of dat gelukt is dus daar ga ik nog even mee kloten.
Sorry Arjen, die heb ik niet, ik ben nog lang niet zoveralmightyarjen schreef op maandag 03 december 2012 @ 11:51:
Heeft iemand nog een gouden tip hoe ik dit kan oplossen?
Yep, zeg dat wel en vanmorgen nog een stuk of 30 eraan vastgeknoopt om de driver max7221 eraan te koppelen.edit: Sjeez Kitao, wat een dradenbende
Schietgebedje gedaan, programma ingeladen en ......... nada niks njente.

Even zag ik het niet meer zitten maar na 3 keer opnieuw de chip zo hard mogelijk in het breadboard te hebben gepropt kwam er eindelijk beeld

klik
(Op de foto zie je 2 gradendriehoeken die geklemd de dradenjungle boven het display vandaan houden)
Dus nu werkt het hoewel het soms nog de neiging heeft om vast te lopen op 8.8.8.8.8.8.8.8. hetgeen ook verdraaid lastig is om er weer uit te krijgen.
Geen idee hoe dat komt maar dat slurpt wel lekker stroom dan.
En dat brengt me bij een vraag :
Het breadboard en de M7221 worden gevoed vanaf de uno.
De uno is aangesloten op een usb vanaf de computer én de uno is aangesloten op een 7.5V adapter vanaf het lichtnet op de jack.
Waar haalt de uno nu zijn voeding vandaan ?!!
Vanaf de jack of vanaf de usb ?
Ik begrijp waar je heen wilt, maar ik zie dat nog niet als praktische toepassing. Kan je het wat toelichten?furby-killer schreef op maandag 03 december 2012 @ 13:47:
Enige wat die interrupt dus hoeft te doen is wat stuff opslaan van huidige state, een register eentje ophogen, en weer verder gaan. Lijkt me niet dat dat een probleem kan geven eigenlijk.
Als de jack eraan zit via de jack. Anders via USB...kitao schreef op maandag 03 december 2012 @ 14:12:
Vanaf de jack of vanaf de usb ?
Verwijderd
Flashen van de bootloader was dus inderdaad het probleem, ik deed het niet goed.
Nu is het wel gelukt en alles werkt.
Tnx!
Nu is het wel gelukt en alles werkt.
Tnx!
Vraag is vooral wat jouw interrupt routine nu precies doet. Wat voor een code heb jij daarin staan?almightyarjen schreef op maandag 03 december 2012 @ 14:16:
[...]
Ik begrijp waar je heen wilt, maar ik zie dat nog niet als praktische toepassing. Kan je het wat toelichten?
de ISR kijkt naar de stand van de motor, als die groter of gelijk is aan de gewenste eindstand moet er geremd en gepositioneerd worden. Ik heb dat remmen en positioneren onderverdeeld in een aantal procedures, laten we zeggen "remmen", "positionerengrof" en "positionerenfijn". aan de hand van booleans wordt dan door de ISR bepaald welke procedure er moet worden aangeroepen. Aan het einde van een procedure wordt dus een boolean die refereert aan die procedure op false gezet en de boolean die refereert aan de volgende procedure wordt dan op true gezet.furby-killer schreef op maandag 03 december 2012 @ 14:26:
[...]
Vraag is vooral wat jouw interrupt routine nu precies doet. Wat voor een code heb jij daarin staan?
Als bijvoorbeeld de procedure remmen bezig is, dan kan die halverwege worden onderbroeken door een interrupt omdat de motor nog draait. Het gevolg daarvan is dat de procedure remmen weer opnieuw wordt gestart (de booleanwaarden zijn immers niet veranderd omdat de procedure niet geheel is doorlopen). En dit geeft problemen, terwijl het volgens mij theoretisch wel zou moeten werken...
code voor ISR (als je er iets mee kan):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) if((bool)(PINE & _BV(5)) == (bool)(PING & _BV(2))) _secondTachPos++; else _secondTachPos--; #else if((bool)(PIND & _BV(3)) == (bool)(PIND & _BV(6))) _secondTachPos++; else _secondTachPos--; #endif if (mustBrake2 == false) { secondEncoder(); } if (mustBrake2 == true) { braking2(); } if (mustRoughFinalize2 == true) { roughFinalizing2(); } if (mustFineFinalize2 == true) { //fineFinalizing2(); } |
Code voor procedure remmen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| void braking2() { //Serial.print ("br "); digitalWrite(secondPWM, HIGH); digitalWrite(logicSecond1, HIGH); digitalWrite(logicSecond2, LOW); //go backward (enforced brake) counter2++; //counter2 zorgt dat deze procedure 2x wordt doorlopen en werkt als delay delay (2); if (counter2 > 2) { digitalWrite(logicSecond2, HIGH); //actual brake Serial.print ("br2 "); counter2 = 0; mustRoughFinalize2 = true; mustBrake2 = false; } |
Ik zou proberen de interrupt procedure alleen de de encoders waarden bij te laten houden (dus de interrupt routine kleiner maken) of alles in de interrupt doen.almightyarjen schreef op maandag 03 december 2012 @ 14:50:
[...]
de ISR kijkt naar de stand van de motor, als die groter of gelijk is aan de gewenste eindstand moet er geremd en gepositioneerd worden. Ik heb dat remmen en positioneren onderverdeeld in een aantal procedures, laten we zeggen "remmen", "positionerengrof" en "positionerenfijn". aan de hand van booleans wordt dan door de ISR bepaald welke procedure er moet worden aangeroepen. Aan het einde van een procedure wordt dus een boolean die refereert aan die procedure op false gezet en de boolean die refereert aan de volgende procedure wordt dan op true gezet.
Serial.print kan je beter sowieso niet in je ISR (of subroutines) gebruiken, aangezien die zelf ook gebruik maakt van (timer) interrupts. Verder heb je delays in je ISR staan. Dat is ook niet handig.
Wat Mr_gadget zegt dus eigenlijk...
Wat Mr_gadget zegt dus eigenlijk...
In principe zolang je binnen je ISR zit mag hij niet nog een interrupt starten. Als het te lang duurt kan het dus wel dat je interrupts mist (de volgende interrupt zal in de wachtrij gezet worden voor wanneer je ISR klaar is, maar als je er dan nog eentje krijgt is hij verdwenen).
Verder wat de twee bovenstaande zeggen: in principe wil je je ISR zo kort mogelijk houden, oftewel enkel je encoder bij laten houden, en mogelijk nog wat vlaggetjes zetten ofzo, maar meer niet. Vooral bij zoiets wat toch redelijk snel zijn werk moet doen.
Daarnaast, zijn al jouw global variabelen die in de ISR worden gebruikt gedefinieerd als volatile? Anders hebben compilers de neiging ze gewoon weg te gooien.
Verder wat de twee bovenstaande zeggen: in principe wil je je ISR zo kort mogelijk houden, oftewel enkel je encoder bij laten houden, en mogelijk nog wat vlaggetjes zetten ofzo, maar meer niet. Vooral bij zoiets wat toch redelijk snel zijn werk moet doen.
Daarnaast, zijn al jouw global variabelen die in de ISR worden gebruikt gedefinieerd als volatile? Anders hebben compilers de neiging ze gewoon weg te gooien.
oops
Ik heb verder niet stilgestaan bij het volatile-gebeuren, goede opmerking! Ik zal daar ook eens naar kijken.furby-killer schreef op maandag 03 december 2012 @ 16:01:
In principe zolang je binnen je ISR zit mag hij niet nog een interrupt starten. Als het te lang duurt kan het dus wel dat je interrupts mist (de volgende interrupt zal in de wachtrij gezet worden voor wanneer je ISR klaar is, maar als je er dan nog eentje krijgt is hij verdwenen).
Verder wat de twee bovenstaande zeggen: in principe wil je je ISR zo kort mogelijk houden, oftewel enkel je encoder bij laten houden, en mogelijk nog wat vlaggetjes zetten ofzo, maar meer niet. Vooral bij zoiets wat toch redelijk snel zijn werk moet doen.
Daarnaast, zijn al jouw global variabelen die in de ISR worden gebruikt gedefinieerd als volatile? Anders hebben compilers de neiging ze gewoon weg te gooien.
Ik begrijp dat de ISR zo kort mogelijk moet worden gehouden, maar hoe los je het dan op als je een reeks bewerkingen moet uitvoeren zoals in mijn geval? De ISR is in mijn geval al vrij kort: die verwijst door naar een andere procedure. Dan zal de procedure waarnaar verwezen wordt dus korter moeten zijn, maar dan kan ik weer niet alle bewerkingen uitvoeren...
Als je doorverwijst naar een andere procedure in je ISR, dan is die procedure ook onderdeel van de ISR. In jouw geval wordt de ISR en braking2 doorlopen, voordat het stokje weer terug wordt gegeven aan de loop().
Alles naar de #endif wil je niet in de ISR hebben.
Ik zou trouwens ook kijken naar je if-statements. Kan je daar niet meer met 'else' of 'else if' werken?
Alles naar de #endif wil je niet in de ISR hebben.
Ik zou trouwens ook kijken naar je if-statements. Kan je daar niet meer met 'else' of 'else if' werken?
Je kan bijvoorbeeld een flag laten zetten, bijvoorbeeld een global variabele 'nieuweMeting', die je true maakt als er een interrupt is, en false als je in je main loop dat detecteerd en er wat mee doet. (Wel rekening er mee houden dat die dan in je main loop kan wijzigen als er nog een interrupt komt).[b][message=39387010,noline]almightyarjen schreef op maandag 03 december 2012 @ 19:17
Ik begrijp dat de ISR zo kort mogelijk moet worden gehouden, maar hoe los je het dan op als je een reeks bewerkingen moet uitvoeren zoals in mijn geval? De ISR is in mijn geval al vrij kort: die verwijst door naar een andere procedure. Dan zal de procedure waarnaar verwezen wordt dus korter moeten zijn, maar dan kan ik weer niet alle bewerkingen uitvoeren...
Je kan ook ietsjes meer doen dan dat, bijvoorbeeld je positiebepaling, en dan doe je daarna nog iets van:
code:
1
2
3
4
| if (secondTachPos > MAX_POS) moetRemmen = true; else moetRemmen = false; |
(moetRemmen moet dan global volatile variabele zijn).
Dan kan je in je main loop kijken of moetRemmen true is of false is. Uiteraard kan je ook die vergelijking in je main loop doen, scheelt iets in je ISR, maar het is niet dat je helemaal niks in je ISR mag doen, alleen geen uitgebreide berekeningen, geen delays, en niks anders dat veel tijd kost. (En al helemaal niet iets dat blocked, zoals wachten tot je seriele data krijgt).
Okee, bedankt. Ik zal er eens naar kijken of ik het wat anders kan opzetten. De if statements heb ik even lomp neergezet maar dat moet inderdaad wel wat netter ja...
Ik had het er in een vorige post al over dat een 8-digit-display dat op een leddriver de max7221 zit aangesloten, dat die soms ineens vast staat op de weergave 8.8.8.8 8.8.8.8.
Eerst had ik montagedraad zitten tussen de uno en de load, clock en data-in van het IC maar die heb ik omgewisseld met jumpers wat iets steviger zit en hoewel het nu minder vaak voorkomt is het verschijnsel nog niet verdwenen. Ik heb nu een 24-uurs downcounter erin gezet maar toen ik thuis kwam stond die ook vast.
Wordt dit veroorzaakt door hardware of door de software ?
En indien hardware is dat dan het IC of de bedrading of de uno ?
En ook al weet je het antwoord niet, is dit een bekend verschijnsel dat vaker optreedt ?
Alvast bedankt
Ps, de rimpelcondensatoren zitten gewoon aangesloten volgens deze afbeelding :
Eerst had ik montagedraad zitten tussen de uno en de load, clock en data-in van het IC maar die heb ik omgewisseld met jumpers wat iets steviger zit en hoewel het nu minder vaak voorkomt is het verschijnsel nog niet verdwenen. Ik heb nu een 24-uurs downcounter erin gezet maar toen ik thuis kwam stond die ook vast.
Wordt dit veroorzaakt door hardware of door de software ?
En indien hardware is dat dan het IC of de bedrading of de uno ?
En ook al weet je het antwoord niet, is dit een bekend verschijnsel dat vaker optreedt ?
Alvast bedankt
Ps, de rimpelcondensatoren zitten gewoon aangesloten volgens deze afbeelding :

Als je nou de software aanpast, zodat de klok ipv "88888888", "11111111" weergeeft, hangt de klok dan ook? If so, dan lijkt het me eerder een softwareprobleem dan een hardware probleem...kitao schreef op dinsdag 04 december 2012 @ 19:26:
Ik had het er in een vorige post al over dat een 8-digit-display dat op een leddriver de max7221 zit aangesloten, dat die soms ineens vast staat op de weergave 8.8.8.8 8.8.8.8.
Eerst had ik montagedraad zitten tussen de uno en de load, clock en data-in van het IC maar die heb ik omgewisseld met jumpers wat iets steviger zit en hoewel het nu minder vaak voorkomt is het verschijnsel nog niet verdwenen. Ik heb nu een 24-uurs downcounter erin gezet maar toen ik thuis kwam stond die ook vast.
Wordt dit veroorzaakt door hardware of door de software ?
En indien hardware is dat dan het IC of de bedrading of de uno ?
En ook al weet je het antwoord niet, is dit een bekend verschijnsel dat vaker optreedt ?
Alvast bedankt![]()
Ps, de rimpelcondensatoren zitten gewoon aangesloten volgens deze afbeelding :
[afbeelding]
Dit is de software :
Ik snap daar geen bal weinig van, maar dat die klok 88888888 moet aangeven komt daar volgens mij helemaal niet in voor.
Dat is gewoon een positie waar mijn hele opstelling - ook bij andere programma's - soms ineens naar toe springt.
En dan staat alles vast.
Nu vind ik dat geen ramp want dit is toch alleen maar om te testen maar ik zou wel eens een reden willen weten. Zouden de vele draden die gebruikt zijn toch voor storingsvelden kunnen zorgen ?
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| // ******************************************************************** // * 24 Hour Coundown * // * Because if you have just built a MAX7221/MAX7219 Based 8 Digit, * // * 7 Segment, LED Display then you will want to test it somehow. * // * Nothing says LED Segment display more than a TV/Film style * // * countdown timer. * // * * // * A silly test routine by Blair Thompson - www.justblair.co.uk * // ******************************************************************** #include <LedControl.h> //We cant do anything without importing a suitable library! // Lets start with the pinouts to the Max72xx led driver // ***************************************************** int DIN = 12; // Pin 1 on the Max72xx int CLK = 11; // Pin 13 on the Max72xx int LOADCS = 10; // Pin 12 on the Max72xx int flashDelay = 100; // delay in MS (100=1/10th second) int ledBrightness = 15; // range is 0-15. 0=lowest, 15 = full power // define the LedControl instance - if I want more I can setup lc2, lc3 etc // ************************************************************************ LedControl lc=LedControl(DIN,CLK,LOADCS,1); // DIN, CLK, Load/CS, 1 = only one chip MAX chip attached. void setup() { pinMode(DIN, OUTPUT); // once only, lets make the pins outputs pinMode(CLK, OUTPUT); pinMode(LOADCS, OUTPUT); // take pins out of power save mode. No updates otherwise. for(int index=0;index<lc.getDeviceCount();index++) { lc.shutdown(index,false); } lc.setIntensity(0,ledBrightness ); //set the brightness } void loop() // here comes the good stuff, the main loop! { int row = 0; //Set the starting position int chipId = 0; //This is not strictly reqd, but if using more than one display this will be needed // First lets display the hours // **************************** for (int hourcountdown=24; hourcountdown>0; hourcountdown--){ int x=hourcountdown; int hourones; int hourtens; hourones=x%10; hourtens=x/10%10; // %10 divides by ten and extracts the remainder lc.setChar(chipId, row+5, 'h', false); // Adds the letter H lc.setDigit(chipId, row+6, (byte) hourones, false); // These two lines add the numerical hours lc.setDigit(chipId, row+7, (byte) hourtens, false); // This technique is repeated several times! // Now the minutes for (int minutecountdown=60; minutecountdown >0; minutecountdown--){ int y=minutecountdown; int minuteones; int minutetens; minuteones=y%10; minutetens=y/10%10; // %10 divides by ten and extracts the remainder lc.setDigit(chipId, row+3, minuteones, true); // These two lines add the numerical hours lc.setDigit(chipId, row+4, minutetens, false); // Deja Vu? // And the seconds/tenths just to make it look exciting! for (int seccountdown=600; seccountdown>0; seccountdown--){ int v=seccountdown; int tenths; int secones; int sectens; int thousands; tenths=v%10; // Again divide by 10 and calculate the remainder secones=v/10%10; sectens=v/100%10; thousands=v/1000%10; lc.setDigit(chipId, row, (byte) tenths, false); lc.setDigit(chipId, row+1, (byte) secones, true); // True in the arguments activates the dot... lc.setDigit(chipId, row+2, (byte) sectens, false); delay (flashDelay); } } } } // *** That's All Folks!!! Jack Bauer eat your heart out! *** |
Ik snap daar geen bal weinig van, maar dat die klok 88888888 moet aangeven komt daar volgens mij helemaal niet in voor.
Dat is gewoon een positie waar mijn hele opstelling - ook bij andere programma's - soms ineens naar toe springt.
En dan staat alles vast.
Nu vind ik dat geen ramp want dit is toch alleen maar om te testen maar ik zou wel eens een reden willen weten. Zouden de vele draden die gebruikt zijn toch voor storingsvelden kunnen zorgen ?
Het programma geeft inderdaad nooit 888888 aan. Het kan zijn dat er een draadje los zit, wat ervoor zorgt dat het hele gebeuren in de war raakt, maar die kans lijkt me klein. De vele draden zouden ook niet voor al te veel storing kunnen zorgen volgens mij, aangezien het allemaal vrij laagfrequent is. Je zou kunnen proberen om de tienden van seconden weg te laten, dan moet je de volgende regel weghalen of "//" voorzetten:
Gebeurt het altijd op hetzelfde tijdstip? Na een uur? 10 minuten? Probeer dat ook een na te gaan. En anders zou je die kerel nog kunnen mailen, of hij bekend is met het probleem. Je kan hem contacten via zijn website.. Ben wel benieuwd wat het probleem is!
code:
1
| lc.setDigit(chipId, row, (byte) tenths, false); |
Gebeurt het altijd op hetzelfde tijdstip? Na een uur? 10 minuten? Probeer dat ook een na te gaan. En anders zou je die kerel nog kunnen mailen, of hij bekend is met het probleem. Je kan hem contacten via zijn website.. Ben wel benieuwd wat het probleem is!
Nee, er zit geen vast ritme in, maar iets zit niet goed.almightyarjen schreef op dinsdag 04 december 2012 @ 22:01:
Het kan zijn dat er een draadje los zit, wat ervoor zorgt dat het hele gebeuren in de war raakt, maar die kans lijkt me klein.
Gebeurt het altijd op hetzelfde tijdstip? Na een uur? 10 minuten? Probeer dat ook eens na te gaan.
Ook onderstaand programma, wat ik zelf gemodificeerd heb, knippert lukraak, soms volgens bedoeling, dan weer wordt niet het hele display gecleard en blijven er tekens staan, dan worden weer niet alle tekens geschreven en ook dit alles niet volgens vaste volgorde volgens mij.
Ik vermoed toch ergens een draadje, wat niet zo gek hoeft te zijn aangezien er een stuk of 100 op zitten waarvan 70 montagedraad. Jumpers maken veel beter kontakt maar die zijn op.
Ook ga ik die niet onzinnig allemaal nameten natuurlijk.
Een andere mogelijkheid is dit misschien ?
http://playground.arduino.cc/Main/MAX72XXHardwareThe capacitors are there to supress noise signals introduced through the power-supply lines. By no means these 2 capacitors can be ommitted, as it might lead to sporadic or permanent malfunctions. These types of errors are really hard to track down. Both capacitors must be placed as near as possible to the V+ and the Gnd pins of the MAX72XX.
Maar ja, die zitten erbij en korter bij de bewuste pennen en voedingslijnen krijg ik ze niet.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #include "LedControl.h" // need the library LedControl lc=LedControl(12,11,10,1); // lc is our object // pin 12 is connected to the MAX7219 pin 1 // pin 11 is connected to the CLK pin 13 // pin 10 is connected to LOAD pin 12 // 1 as we are only using 1 MAX7219 void setup() { // the zero refers to the MAX7219 number, it is zero for 1 chip lc.shutdown(0,false);// turn off power saving, enables display lc.setIntensity(0,8);// sets brightness (0~15 possible values) lc.clearDisplay(0);// clear screen } void loop() { lc.setRow(0,0,B00010101); lc.setChar(0,1,'E',false); lc.setDigit(0,2,1,0); lc.setRow(0,3,B01110110); lc.setRow(0,4,B01110110); lc.setDigit(0,5,1,0); lc.setChar(0,6,'d',false); lc.setChar(0,7,'e',false); delay(1000); lc.clearDisplay(0); delay(1000); } |
En ik zal jouw tip even toepassen van het verwijderen van die regel, kan echter wel een uur of zelfs 24 uur duren voordat ik er definitief iets over kan zeggen.
[ Voor 4% gewijzigd door kitao op 04-12-2012 22:34 ]
Lijkt mij eigenlijk erg grote kans, want dit is typisch gedrag van slecht contact, of toch teveel storing op de voeding.almightyarjen schreef op dinsdag 04 december 2012 @ 22:01:
Het kan zijn dat er een draadje los zit, wat ervoor zorgt dat het hele gebeuren in de war raakt, maar die kans lijkt me klein.
Oftewel: check de bekabeling. Gezien dat dit bij alle displays misgaat, moet het misgaan rond de arduino/IC. Oftewel de kabels die die twee met elkaar verbinden, of voeding/aarde van het IC.
Je capaciteiten. Zeker weten dat die van 100nF ook 100nF is en niet bijvoorbeeld 100pF? 10uF zit er goed om in?
En je voeding, kan die voldoende stroom leveren?
Wat gebeurd er als je de handel aan zet, maar niks naar het IC verstuurd? Doet hij dan hetzelfde?
De verbinding met de uno en het IC had ik al betere jumpers tussen gezet, de condensatoren kloppen ook, dat weet ik zeker.
De voeding is een 7.5V/1A adapter dus dat lijkt me voldoende.
De bekabeling checken wordt gezien de hoeveelheid erg lastig, pas als ik een flinke set jumpers erbij heb dan kan ik evt. 1 op 1 gaan vervangen. Helaas is ebay niet vlot met leveren van vooraf betaalde spullen merk ik.
En als ik niks naar het IC stuur ?
Dat wordt morgen, ik heb nu de countdown gestart, deze gezet op 3 uur en de tienden seconden verwijderd zoals Arjen tipte. Na 8 minuten gaat nog steeds goed.
De voeding is een 7.5V/1A adapter dus dat lijkt me voldoende.
De bekabeling checken wordt gezien de hoeveelheid erg lastig, pas als ik een flinke set jumpers erbij heb dan kan ik evt. 1 op 1 gaan vervangen. Helaas is ebay niet vlot met leveren van vooraf betaalde spullen merk ik.
En als ik niks naar het IC stuur ?
Dat wordt morgen, ik heb nu de countdown gestart, deze gezet op 3 uur en de tienden seconden verwijderd zoals Arjen tipte. Na 8 minuten gaat nog steeds goed.
Als dat het probleem is is het overspraak, dat is in principe geen heel vreemd idee met die hoeveelheid kabels, dus dat is afwachten. Levering van ebay ligt er aan waar je het besteld, veel zijn Chinezen, en dan duurt het gewoon een tijdje.
Al die bekabeling kan wel overspraak geven, maar een los kabeltje daar zal niet het probleem zijn. Dan doet gewoon één segment het bijvoorbeeld niet, maar dan hoort niet alles zich te resetten.
Al die bekabeling kan wel overspraak geven, maar een los kabeltje daar zal niet het probleem zijn. Dan doet gewoon één segment het bijvoorbeeld niet, maar dan hoort niet alles zich te resetten.
Overspraak krijg je toch eigenlijk alleen maar bij wat hogere frequenties? Van de voeding kan het niet komen want daar zitten al condensatoren op.furby-killer schreef op dinsdag 04 december 2012 @ 22:58:
Als dat het probleem is is het overspraak, dat is in principe geen heel vreemd idee met die hoeveelheid kabels, dus dat is afwachten. Levering van ebay ligt er aan waar je het besteld, veel zijn Chinezen, en dan duurt het gewoon een tijdje.
Al die bekabeling kan wel overspraak geven, maar een los kabeltje daar zal niet het probleem zijn. Dan doet gewoon één segment het bijvoorbeeld niet, maar dan hoort niet alles zich te resetten.
Furby, is het een idee om die current limiting resistor eens wat hoger te maken, zodat je het display nog net kan zien branden? Bij lagere stromen zou de overspraak dan minder moeten zijn, als het in het deel tussen het IC en het display plaatsvindt...
Ik kan software-matig het display nog wat dimmen, die staat nu op 8 van schaal 0-15.
Nu zit er een 33K in en ik heb wel kleinere meebesteld maar geen grotere, die moet ik dan morgen gaan zoeken.
Overigens is het display behoorlijk helder nu en is inmiddels 1 uur weggetikt zonder problemen.
Ik zal de delay dan ook in mijn mini-programma wat hoger zetten, kijken of dat helpt.
Tnx voor de tips in ieder geval.
Nu zit er een 33K in en ik heb wel kleinere meebesteld maar geen grotere, die moet ik dan morgen gaan zoeken.
Overigens is het display behoorlijk helder nu en is inmiddels 1 uur weggetikt zonder problemen.
Ik zal de delay dan ook in mijn mini-programma wat hoger zetten, kijken of dat helpt.
Tnx voor de tips in ieder geval.
Ik zit te kloten met een servomotor icm de popbot (zie pagina terug). Op het moment dat de bot rijdt, (= weerstand) gaat de servomotor niet goed draaien (aangegeven plekken 850 en 1850). Hij stopt bij 1850, hapert daar en draait verder door. Hij draait zichzelf (de constructie eraan) dan kapot. Op het moment dat hij stilstaat/wordt opgetild is het probleem over en draait hij weer goed.
Hoe los ik dit op?
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Oh, maar wellicht is het dimmen het probleem: dat gebeurt met een aardig hoge frequentie wat eventueel storing kan veroorzaken. Probeer die eens op maximaal te zetten (HIGH), wellicht dat dat helpt (als je huidige proef de mist in gaat)kitao schreef op dinsdag 04 december 2012 @ 23:49:
Ik kan software-matig het display nog wat dimmen, die staat nu op 8 van schaal 0-15.
Nu zit er een 33K in en ik heb wel kleinere meebesteld maar geen grotere, die moet ik dan morgen gaan zoeken.
Overigens is het display behoorlijk helder nu en is inmiddels 1 uur weggetikt zonder problemen.
Ik zal de delay dan ook in mijn mini-programma wat hoger zetten, kijken of dat helpt.
Tnx voor de tips in ieder geval.
Wat heb je eraan veranderd dan, want hij deed het wel toch?F.West98 schreef op dinsdag 04 december 2012 @ 23:50:
Ik zit te kloten met een servomotor icm de popbot (zie pagina terug). Op het moment dat de bot rijdt, (= weerstand) gaat de servomotor niet goed draaien (aangegeven plekken 850 en 1850). Hij stopt bij 1850, hapert daar en draait verder door. Hij draait zichzelf (de constructie eraan) dan kapot. Op het moment dat hij stilstaat/wordt opgetild is het probleem over en draait hij weer goed.
Hoe los ik dit op?
Dat zou inderdaad kunnen helpen, geeft iig minder troep op de output dan softwarematig dimmen.almightyarjen schreef op dinsdag 04 december 2012 @ 23:39:
[...]
Overspraak krijg je toch eigenlijk alleen maar bij wat hogere frequenties? Van de voeding kan het niet komen want daar zitten al condensatoren op.
Furby, is het een idee om die current limiting resistor eens wat hoger te maken, zodat je het display nog net kan zien branden? Bij lagere stromen zou de overspraak dan minder moeten zijn, als het in het deel tussen het IC en het display plaatsvindt...
Je hebt gelijk dat overspraak bij hoge frequenties is, maar het hard aan en uitschakelen van die displays zitten flink wat hoge frequenties in, en dat zal ook op een redelijke snelheid scannen. Normaal gesproken zou ik zeggen: geen probleem. Maar laten we wel wezen, dat is niet de meest subtiele dradenbende ooit
Probleem voor mij blijft vooral dat het die complete chip moet zijn die over de zeik gaat, het kan niet van 1 segment een draadje zijn, het moet alles zijn.
@Arjen
Proef loopt nog, maar ik heb iets veranderd wat een bug oplevert :
In regel 1 stond eerst in de originele code :
die 24 heb ik veranderd in 3
helaas na een uur wegtikken is de 3 niet versprongen naar 2 maar blijft lekker op 3 staan terwijl bij een vorige test de 24 wel naar 23 versprong. Dit heeft te maken met de afronding denk ik dus ligt niet zozeer aan de hardware volgens mij.
Voluit zetten wordt ook weer morgen, ik wil nog even zien of het volgende uur naar 2 verspring of naar 1 of helemaal niet.
@furby
Maar laten we wel wezen, dat is niet de meest subtiele dradenbende ooit
Daar schaam ik me ook niet voor hoor, de bedoeling was een echte 64 leds klokje te maken dus een seriele display of een intern doorverbonden type was geen optie.
Ook moet ik roeien met wat ik heb, grote hoeveelheden steekbruggen op maat heb ik nu eenmaal niet

Als de klok af is dan heb ik toch de breadboards en de jumpers weer nodig dus dan maak ik het zo compact mogelijk, dat werkt wellicht beter.
Edit: de uren zijn inderdaad ineens van 3 naar 1 versprongen dus het ligt aan de afronding.

So far so good !!
Gouden tip van die tienden verwijderen Arjen
Proef loopt nog, maar ik heb iets veranderd wat een bug oplevert :
C++:
1
2
3
4
5
6
7
8
9
| for (int hourcountdown=3; hourcountdown>0; hourcountdown--){ int x=hourcountdown; int hourones; int hourtens; hourones=x%10; hourtens=x/10%10; // %10 divides by ten and extracts the remainder lc.setChar(chipId, row+5, 'h', false); // Adds the letter H lc.setDigit(chipId, row+6, (byte) hourones, false); // These two lines add the numerical hours lc.setDigit(chipId, row+7, (byte) hourtens, false); // This technique is repeated several times! |
In regel 1 stond eerst in de originele code :
C++:
1
| for (int hourcountdown=24; hourcountdown>0; hourcountdown--){ |
die 24 heb ik veranderd in 3
helaas na een uur wegtikken is de 3 niet versprongen naar 2 maar blijft lekker op 3 staan terwijl bij een vorige test de 24 wel naar 23 versprong. Dit heeft te maken met de afronding denk ik dus ligt niet zozeer aan de hardware volgens mij.
Voluit zetten wordt ook weer morgen, ik wil nog even zien of het volgende uur naar 2 verspring of naar 1 of helemaal niet.
@furby
Maar laten we wel wezen, dat is niet de meest subtiele dradenbende ooit
Daar schaam ik me ook niet voor hoor, de bedoeling was een echte 64 leds klokje te maken dus een seriele display of een intern doorverbonden type was geen optie.
Ook moet ik roeien met wat ik heb, grote hoeveelheden steekbruggen op maat heb ik nu eenmaal niet

Als de klok af is dan heb ik toch de breadboards en de jumpers weer nodig dus dan maak ik het zo compact mogelijk, dat werkt wellicht beter.
Edit: de uren zijn inderdaad ineens van 3 naar 1 versprongen dus het ligt aan de afronding.

So far so good !!
Gouden tip van die tienden verwijderen Arjen
[ Voor 9% gewijzigd door kitao op 05-12-2012 00:47 . Reden: afb. aangepast ]
Mogge,
Het euvel is verholpen denk ik. Het geval was namelijk dat ik op pen 11 van de max7221 niet alleen digit 1 had aangesloten maar ook de load/cs vanaf de arduino en pen 12 van het IC was helemaal niet aangesloten !!!!
Ik zag het toen ik er een vergrootglas bijpakte en het helpt ook niet als het kleurenassortiment draden op is zodat alles één kluwen lijkt.
Leuke vraag is dan natuurlijk dat het resultaat eigenlijk tijdens die foute bedrading nog niet eens zo slecht was, die load/cs draad lijkt me toch niet triviaal of wel ?
edit:
Eigenlijk is het enkel /CS en niet Load/CS want ik heb de 7221 :

Het euvel is verholpen denk ik. Het geval was namelijk dat ik op pen 11 van de max7221 niet alleen digit 1 had aangesloten maar ook de load/cs vanaf de arduino en pen 12 van het IC was helemaal niet aangesloten !!!!


Ik zag het toen ik er een vergrootglas bijpakte en het helpt ook niet als het kleurenassortiment draden op is zodat alles één kluwen lijkt.
Leuke vraag is dan natuurlijk dat het resultaat eigenlijk tijdens die foute bedrading nog niet eens zo slecht was, die load/cs draad lijkt me toch niet triviaal of wel ?
edit:
Eigenlijk is het enkel /CS en niet Load/CS want ik heb de 7221 :

Toch vreemd dat alles dan nog in verhouding redelijk werkte terwijl die niet eens aangesloten wasChip-Select Input. Serial data is loaded into the shift register while CS is low. The last 16 bits of
serial data are latched on CS’s rising edge.
[ Voor 28% gewijzigd door kitao op 05-12-2012 09:25 ]
Kitao, dat soort foutjes, daar kan je zoveel tijd aan kwijt zijn.. Maar respect voor je doorzettingsvermogen
En waarom hij het nog zo goed deed: ik heb zo geen idee...
Tnx, dat zal iedereen wel gebeuren denk ik, jouw rover had ook veel bedrading.
Over /CS (chip select) staat hier een mooi stukje, aangezien er maar één chip is in mijn opstelling is dat mss de verklaring waarom het toch redelijk werkte.
Overigens net geprobeerd de /CS direkt op 5V te zetten en direkt op GND maar gaf geen goed resultaat.
Ook 'snel' (kabeltje overzetten) van 5V switchen naar GND zodat er een hoog/laag signaal werd gesimuleerd deed niks.
Foutief terug zetten op pen11 (dig1) en de klok liep weer.
(ondertussen heb ik wellicht al tig keer kortsluiting gemaakt, maar lijkt geen effect te hebben, chip leeft nog
Affin, weinig boeiend ook, je moet gewoon goed aansluiten die handel dan hoef je ook niet te gaan zoeken waarom het wel werkt als het niet goed zit toch ?
En over dat doorzetten, ik heb weinig keus, ik heb geen bordje of een draadje meer over om wat anders neer te zetten zowat.
Afbreken doe ik niet want ik wacht op een RTC en veel meer toepassingen die ik met de huidige opstelling kan maken zie ik niet op het net.
Een getallengenerator had me wel leuk geleken maar ik vind daar nergens een code voor die ik nu kan toepassen
Over /CS (chip select) staat hier een mooi stukje, aangezien er maar één chip is in mijn opstelling is dat mss de verklaring waarom het toch redelijk werkte.
Overigens net geprobeerd de /CS direkt op 5V te zetten en direkt op GND maar gaf geen goed resultaat.
Ook 'snel' (kabeltje overzetten) van 5V switchen naar GND zodat er een hoog/laag signaal werd gesimuleerd deed niks.
Foutief terug zetten op pen11 (dig1) en de klok liep weer.
(ondertussen heb ik wellicht al tig keer kortsluiting gemaakt, maar lijkt geen effect te hebben, chip leeft nog
Affin, weinig boeiend ook, je moet gewoon goed aansluiten die handel dan hoef je ook niet te gaan zoeken waarom het wel werkt als het niet goed zit toch ?
En over dat doorzetten, ik heb weinig keus, ik heb geen bordje of een draadje meer over om wat anders neer te zetten zowat.
Afbreken doe ik niet want ik wacht op een RTC en veel meer toepassingen die ik met de huidige opstelling kan maken zie ik niet op het net.
Een getallengenerator had me wel leuk geleken maar ik vind daar nergens een code voor die ik nu kan toepassen

[ Voor 18% gewijzigd door kitao op 05-12-2012 11:02 ]
Een servo toegevoegdalmightyarjen schreef op woensdag 05 december 2012 @ 00:12:
[...]
Wat heb je eraan veranderd dan, want hij deed het wel toch?
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Verwijderd
Vraagje: Ik wil mijn Arduino 2560 programmeren via ISP in plaats van de USB-poort.
Later wil ik ook de bootloader vervangen dus moet ik zowieso een ISP programmer hebben.
Welke programmer kan ik daar voor gebruiken? Ik wil hem niet alleen gebruiken met de
Arduino software. Maar ook met Atmel Studio 6. Ik zag een dingetje van Polulu. Maar
rijst al gauw de vraag, werkt dat wel. Wat gebruiken jullie?
Later wil ik ook de bootloader vervangen dus moet ik zowieso een ISP programmer hebben.
Welke programmer kan ik daar voor gebruiken? Ik wil hem niet alleen gebruiken met de
Arduino software. Maar ook met Atmel Studio 6. Ik zag een dingetje van Polulu. Maar
rijst al gauw de vraag, werkt dat wel. Wat gebruiken jullie?
Wil je het perse software-matig oplossen?almightyarjen schreef op maandag 03 december 2012 @ 11:51:
Ik heb een NXT motor van Lego die ik aanstuur via een microcontroller (ATmega (arduino)). In deze motor zit een rotary encoder en zorgt voor een interrupt bij elke puls (één puls per graad). Het probleem met die motor is dat die door de bewegende massa nog een stukje doordraait zodra hij het stopcommando heeft gekregen. [...]
Heeft iemand nog een gouden tip hoe ik dit kan oplossen?
Met een wormwiel zou je het doordraaien moeten kunnen voorkomen.
Hm vraagje mensen ik heb 2x Onewire Temp sensors (DS18b20) deze library heeft hier ergens een 750 delay insteken, maar ik heb ook een klok module die ik elke "seconde" wil laten updaten naar een LCD.
is hier een algemene oplossing voor? nu loopt de klok niet mooi per seconden, kan dit uiteraard verandere naar per min.. maar dat is eerder een omweg dan een oplossing
is hier een algemene oplossing voor? nu loopt de klok niet mooi per seconden, kan dit uiteraard verandere naar per min.. maar dat is eerder een omweg dan een oplossing
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Inmiddels RNG gevonden : http://arduino.cc/en/Reference/Random en deze hierin geplakt :
Werkt prima op de monitor, maar helaas, ik krijg de volgende melding :
'class ledcontrol' has no member named 'lcprint' (regel 22)
Iets te simpel benaderd waarschijnlijk of beter gezegd, het programmeren wordt veels te ingewikkeld gemaakt.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include "LedControl.h" // need the library LedControl lc=LedControl(12,11,10,1); // lc is our object // pin 12 is connected to the MAX7219 pin 1 // pin 11 is connected to the CLK pin 13 // pin 10 is connected to LOAD pin 12 // 1 as we are only using 1 MAX7219 long randNumber; void setup() { // the zero refers to the MAX7219 number, it is zero for 1 chip lc.shutdown(0,false);// turn off power saving, enables display lc.setIntensity(0,8);// sets brightness (0~15 possible values) lc.clearDisplay(0);// clear screen Serial.begin(9600); randomSeed(analogRead(0)); } void loop(){ // print a random number from 0 to 9999 randNumber = random(10000); Serial.println(randNumber); lc.print(randNumber); delay(2000); } |
Werkt prima op de monitor, maar helaas, ik krijg de volgende melding :
'class ledcontrol' has no member named 'lcprint' (regel 22)
Iets te simpel benaderd waarschijnlijk of beter gezegd, het programmeren wordt veels te ingewikkeld gemaakt.
met andere woorden er is geen "lc.print"
met nog meer andere woorden
de class "LedControl" heeft geen methode "print"
met nog meer andere woorden
de class "LedControl" heeft geen methode "print"
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Nee, daar was ik ook al achter. Maar even graag een hintje in grote lijnen, hoe los je dit op ?Mattie112 schreef op woensdag 05 december 2012 @ 12:13:
met andere woorden er is geen "lc.print"
met nog meer andere woorden
de class "LedControl" heeft geen methode "print"
Ik krijg bijvoorbeeld 1234 als random number op de monitor, hoe hak je die in 4 stukjes zodat ieder cijfer op zn eigen 7-segment display terecht komt ?
En ik merk erbij op, als dit gecompliceerd is laat dan maar gaan, dit is geen vraag om even iets voor mij te laten programmeren, dan had ik maar les moeten nemen.
Als ik eenmaal de 4 cijfers heb van dit getal dan weet ik zelf hoe ze op de display te krijgen.
Voor een PID-controller gebruik ik iets als onderstaande. Deze code is trouwens ongetest en ff snel uit mijn hoofd getypt...Icekiller2k6 schreef op woensdag 05 december 2012 @ 11:53:
Hm vraagje mensen ik heb 2x Onewire Temp sensors (DS18b20) deze library heeft hier ergens een 750 delay insteken, maar ik heb ook een klok module die ik elke "seconde" wil laten updaten naar een LCD.
is hier een algemene oplossing voor? nu loopt de klok niet mooi per seconden, kan dit uiteraard verandere naar per min.. maar dat is eerder een omweg dan een oplossing
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| int delayTime = 750; // Instellen van de delaytijd in ms. unsigned long delayStartTime; boolean delaying = false; void setup() { } void loop() { if(!delaying){ delayStartTime = millis(); // We beginnen NU met de delay. delaying = !delaying; //Hier de code die voor de delay moet plaatsvinden. } else { if(millis() - delayStartTime>delayTime) // Is de delay al verlopen? { delaying = !delaying; //Hier de code voor na de delay van 750 sec. } } } |
Ik heb werkelijk waar geen idee. Open eventjes de readme (of de source zelf) van de library daar zal vast wel iets in staan hoe je hem moet gebruiken.kitao schreef op woensdag 05 december 2012 @ 12:17:
[...]
Nee, daar was ik ook al achter. Maar even graag een hintje in grote lijnen, hoe los je dit op ?
Ik krijg bijvoorbeeld 1234 als random number op de monitor, hoe hak je die in 4 stukjes zodat ieder cijfer op zn eigen 7-segment display terecht komt ?
En ik merk erbij op, als dit gecompliceerd is laat dan maar gaan, dit is geen vraag om even iets voor mij te laten programmeren, dan had ik maar les moeten nemen.
Als ik eenmaal de 4 cijfers heb van dit getal dan weet ik zelf hoe ze op de display te krijgen.
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Umm hier zijn een aantal methodes voor 1 methode is het afsplitsen per "eenheid".
hiervoor moet je in dit geval wel weten of het groter is al 1000, 100, 10.
dan kun je zoiets doen
mss dat er een elegantere oplossing is
maar zit momenteel met aspx in m'n hoofd dus niet meteen een beter algoritme ervoor :-) (er is vast wel een)
hiervoor moet je in dit geval wel weten of het groter is al 1000, 100, 10.
dan kun je zoiets doen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| int getal=1020; int duizendtal=0; int honderdtal=0; int tiental=0; int eenheid=0; if(getal>=1000){ duizendtal=(int) (getal/1000); getal-=(duizendtal*1000); honderdtal=(int) (getal/100); //etc }else if(getal>=100){ //.. }else if(getal>=10){ //.. }else{ //.. } |
mss dat er een elegantere oplossing is
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
hmm ik snap wat je bedoelt.. :-) maar dan heb je soms de kans dat de 50000 gereset is naar 0 ;-)
maar inderdaad is ook op te vangen..
maar er is dus geen "nette" manier om het op te vangen.. jammer
[ Voor 50% gewijzigd door Icekiller2k6 op 05-12-2012 12:27 ]
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Miss heb je hier wat aankitao schreef op woensdag 05 december 2012 @ 12:17:
[...]
Nee, daar was ik ook al achter. Maar even graag een hintje in grote lijnen, hoe los je dit op ?
Ik krijg bijvoorbeeld 1234 als random number op de monitor, hoe hak je die in 4 stukjes zodat ieder cijfer op zn eigen 7-segment display terecht komt ?
En ik merk erbij op, als dit gecompliceerd is laat dan maar gaan, dit is geen vraag om even iets voor mij te laten programmeren, dan had ik maar les moeten nemen.
Als ik eenmaal de 4 cijfers heb van dit getal dan weet ik zelf hoe ze op de display te krijgen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| void countDown() { int i=9; lc.setDigit(0,(byte)i,false); //now we see the number '9' delay(1000); //switch the display off ... lc.shutdown(0,true); //and count down silently while(i>1) { //data is updated, but not shown lc.setDigit(0,(byte)i,false); i--; delay(1000); } //when we switch the display on again we have already reached '1' lc.shutdown(0,false); lc.setDigit(0,(byte)i,false); } |
http://playground.arduino.cc/Main/LedControl
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Mattie en Ice bedankt voor de tips, ik ga hier verder mee proberen. Dat kan wel even duren. Tnx.
ah ik bedenk me juist.. als je toch zoiets wilt doen kun je beter iets doen zoals
dat is sneller denk ik, de code die ik gaf is een leuk "school" voorbeeld van hoe je een integer value kunt splitsen maar zoiets zou je nooit doen denk ik als je de keuze hebt (als het getal door iets anders gemaakt wordt kun je hier uiteraard wel voor opteren!)
C:
1
2
3
| int duizendtal=random(1); int honderdtal=random(9); // |
dat is sneller denk ik, de code die ik gaf is een leuk "school" voorbeeld van hoe je een integer value kunt splitsen maar zoiets zou je nooit doen denk ik als je de keuze hebt (als het getal door iets anders gemaakt wordt kun je hier uiteraard wel voor opteren!)
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
kitao schreef op woensdag 05 december 2012 @ 12:44:
Mattie en Ice bedankt voor de tips, ik ga hier verder mee proberen. Dat kan wel even duren. Tnx.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| Here is a small example that prints an int value (-999..999) on a display with 4 digits. void printNumber(int v) { int ones; int tens; int hundreds; boolean negative; if(v < -999 || v > 999) return; if(v<0) { negative=true; v=v*-1; } ones=v%10; v=v/10; tens=v%10; v=v/10; hundreds=v; if(negative) { //print character '-' in the leftmost column lc.setChar(0,3,'-',false); } else { //print a blank in the sign column lc.setChar(0,3,' ',false); } //Now print the number digit by digit lc.setDigit(0,2,(byte)hundreds,false); lc.setDigit(0,1,(byte)tens,false); lc.setDigit(0,0,(byte)ones,false); } |
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Die constructie heb ik inderdaad al. Het probleem is dat er intern in de NXT motor teveel tandwielen zitten die de "massa" geven. Na wat onderzoek blijkt dat Lego zelf ook tegen dit probleem is aangelopen en de motor naar een positie stuurt, een overshoot heeft en dan corrigeert. Ik heb het inmiddels opgelost, alleen is de oplossing te traag voor de toepassing waar ik het voor wil gebruiken...frickY schreef op woensdag 05 december 2012 @ 11:51:
[...]
Wil je het perse software-matig oplossen?
Met een wormwiel zou je het doordraaien moeten kunnen voorkomen.
In je code worden de te weergeven getallen berekend. Als je hier ipv de berekening een random getal laat genereren zou het volgens mij moeten werken. Dus op de plaatsen waarkitao schreef op woensdag 05 december 2012 @ 12:17:
[...]
Nee, daar was ik ook al achter. Maar even graag een hintje in grote lijnen, hoe los je dit op ?
Ik krijg bijvoorbeeld 1234 als random number op de monitor, hoe hak je die in 4 stukjes zodat ieder cijfer op zn eigen 7-segment display terecht komt ?
En ik merk erbij op, als dit gecompliceerd is laat dan maar gaan, dit is geen vraag om even iets voor mij te laten programmeren, dan had ik maar les moeten nemen.
Als ik eenmaal de 4 cijfers heb van dit getal dan weet ik zelf hoe ze op de display te krijgen.
hourones
hourtens
minuteones
minuteones
tenths
secones
worden berekend zet jij een random nummer neer. bijvoorbeeld:
code:
1
| hourones = random (10); //random nummer van 0 - 9 |
Even een arduino newbie vraag, ik heb een beveiligings camera waar ik een seriele aansluiting op heb.
De camera kan strings sturen en ontvangen op deze poort.
is een arduino bord een oplossing om meerder i/o poorten te genereren ? dus bijvoorbeeld 5 relais aansturen vanuit de camera die op de arduino zijn aangesloten?, of 5 inputs (bewegingsmelders/deurcontaten) die een serieel commando naar de camera kunnen sturen ?
De camera kan strings sturen en ontvangen op deze poort.
is een arduino bord een oplossing om meerder i/o poorten te genereren ? dus bijvoorbeeld 5 relais aansturen vanuit de camera die op de arduino zijn aangesloten?, of 5 inputs (bewegingsmelders/deurcontaten) die een serieel commando naar de camera kunnen sturen ?
Im Not A Vacuum Cleaner, Thats DysOn
Ook maar even een kleine post doen, alweer tijdje in dienst (3-4 maanden) mijn Numitron klok met een atmega 328 als hart die de arduino bootloader draait:
Verplichtte binnenkant:

Verplichtte actieshot:

Rechts achter de buisjes zitten 3 schakelaars:
schakelaar 1: Alarm timer set / klok weergave / Alarrm actief+klokweergave
schakelaar 2: + uren / - uren
schakelaar 3: + minuten / - minuten
Met de potmeter kan de brightness van 0-100% worden geregeld (In plaats van pwm door de arduino te laten genereren heb ik dit gedaan dmv een 555je.
Verplichtte binnenkant:
Verplichtte actieshot:
Rechts achter de buisjes zitten 3 schakelaars:
schakelaar 1: Alarm timer set / klok weergave / Alarrm actief+klokweergave
schakelaar 2: + uren / - uren
schakelaar 3: + minuten / - minuten
Met de potmeter kan de brightness van 0-100% worden geregeld (In plaats van pwm door de arduino te laten genereren heb ik dit gedaan dmv een 555je.
cool
Lekker ruim opgezette printplaat ook, heerlijk: daar hou ik van: zo min mogelijk klein gepiel
Kort beantwoord ja! :-) je moet wel zien .. de camera is waarschijnlijk RS232 dus heb je een max232 of soort gelijk nodig voor -12 & 12v om te vormen naar 0v & 5v.Dysan schreef op woensdag 05 december 2012 @ 15:02:
is een arduino bord een oplossing om meerder i/o poorten te genereren ?
de relays aansturen etc is geen probleem als je voor een atmega168 of 328 gaat dan heb je 5 analoge en 13 (-2 voor rx-tx als je dat zou willen) voor relays aan te sturen.
Om eerlijk te zijn ik snap niet waarom je in zo standalone dingen "arduino" gebruikt.. gebruik je de arduino bootloader..? of bedoel je gewoon dat je de arduino libraries gebruikt?
en nu wat ik echt wil zeggen vett.. me want
[ Voor 7% gewijzigd door Icekiller2k6 op 05-12-2012 19:16 ]
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Je kunt er ook eén zelf bouwen zag ik ?Verwijderd schreef op woensdag 05 december 2012 @ 11:51:
Vraagje: Ik wil mijn Arduino 2560 programmeren via ISP in plaats van de USB-poort.
Later wil ik ook de bootloader vervangen dus moet ik zowieso een ISP programmer hebben.
Welke programmer kan ik daar voor gebruiken? Ik wil hem niet alleen gebruiken met de
Arduino software. Maar ook met Atmel Studio 6. Ik zag een dingetje van Polulu. Maar
rijst al gauw de vraag, werkt dat wel. Wat gebruiken jullie?
Sorry, ik heb hier echt geen verstand van mede daarom ook wi ik jouw post weer even onder de aandacht brengen.
http://www.ikalogic.com/i...ming-isp-for-atmel-chips/
===============
En complimenten voor die klok hierboven, echt een kunstwerk.
AVRISP MKII clone werken erg goed, leuke is dat de atmega162-16au vanaf de fabriek al bootloader bevat en je dus geen kip en ei verhaal hebt, je heb dus geen porgrammer nodig om deze programmer te maken. 
http://tom-itx.dyndns.org...ii/USBTiny_Mkii_index.php
http://www.fourwalledcubicle.com/AVRISP.php
Daarbij is het ook een PDI programmer waarmee je Xmega kan programeren. Programmer is gebaseert op fufa en is ook opgenomen in het fufa project.
Buffer ic om 3,3v logic te schakelen kan je ook vervangen door twee simpele zeners van 3.6v, heb ik ook gedaan op de siganaal lijnen van pdi omdat xmega 3.3v zijn en atmega van de programmer op 5v moet draaien in verband met de usb. Als je pdi niet gebruikt is het helemaal niet van belang, paar weerstandjes op de datalijnen is voor de spi al genoeg. Werkt hier al klein jaartje prima met alle soorten avr's, tiny's, mega en xmega's.
En anders kan je je arduino ook nog gebruiken, er zijn spi library's beschikbaar.
Edit/
Weet dat je de atmega162-16au kan je onder andere hier krijgen, lage verzendkosten. Heb verder niet goed gezocht of ze nog door andere shops worden aangeboden tegen lagere prijs, zul je zelf even moeten uitzoeken.
http://smdshop.nl/product...=27_28_77&products_id=858
Edit/
Oja avrstudio ondersteunt hem, je kan dus via avrstudio gelijk je project uploaden. Word gezien als een officiële atmel programmer.
http://tom-itx.dyndns.org...ii/USBTiny_Mkii_index.php
http://www.fourwalledcubicle.com/AVRISP.php
Daarbij is het ook een PDI programmer waarmee je Xmega kan programeren. Programmer is gebaseert op fufa en is ook opgenomen in het fufa project.
Buffer ic om 3,3v logic te schakelen kan je ook vervangen door twee simpele zeners van 3.6v, heb ik ook gedaan op de siganaal lijnen van pdi omdat xmega 3.3v zijn en atmega van de programmer op 5v moet draaien in verband met de usb. Als je pdi niet gebruikt is het helemaal niet van belang, paar weerstandjes op de datalijnen is voor de spi al genoeg. Werkt hier al klein jaartje prima met alle soorten avr's, tiny's, mega en xmega's.
En anders kan je je arduino ook nog gebruiken, er zijn spi library's beschikbaar.
Edit/
Weet dat je de atmega162-16au kan je onder andere hier krijgen, lage verzendkosten. Heb verder niet goed gezocht of ze nog door andere shops worden aangeboden tegen lagere prijs, zul je zelf even moeten uitzoeken.
http://smdshop.nl/product...=27_28_77&products_id=858
Edit/
Oja avrstudio ondersteunt hem, je kan dus via avrstudio gelijk je project uploaden. Word gezien als een officiële atmel programmer.
[ Voor 17% gewijzigd door mad_max234 op 05-12-2012 20:34 ]
Om even terug te komen op die RNG, (random no. generator) :
Om dit te proberen leek me handigst om met 1 cijfer te beginnen en toen zag ik ineens dat je dit gewoon ook 4 maal kunt doen.
Dit is mijn code daarvoor dat het getal én op de monitor zet én op een 4-digit-display.
Voordeel : ik hoef dan een 4-cijferig getal niet te gaan kraken in 4 aparte onderdelen
Overigens ben ik wel van plan de codes die hiervoor zijn geplaatst nog even door te nemen waarvoor veel dank.
edit: in hoeverre de lage nummers zoals 0013 hiermee aan bod komen valt te bezien, dat zal wel een minpuntje zijn op deze manier.
edit2: valt reuze mee trouwens, net de monitor teruggekeken en zelfs 0004 is voorbij gekomen
Wat denken jullie, zal ik deze code op het arduino-platform zetten met de titel :
max7219/7221 random number generator display ?
Of op youtube ?
Om dit te proberen leek me handigst om met 1 cijfer te beginnen en toen zag ik ineens dat je dit gewoon ook 4 maal kunt doen.
Dit is mijn code daarvoor dat het getal én op de monitor zet én op een 4-digit-display.
Voordeel : ik hoef dan een 4-cijferig getal niet te gaan kraken in 4 aparte onderdelen
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| #include "LedControl.h" // need the library LedControl lc=LedControl(12,11,10,1); // lc is our object // pin 12 is connected to the MAX7219 pin 1 // pin 11 is connected to the CLK pin 13 // pin 10 is connected to LOAD pin 12 // 1 as we are only using 1 MAX7219 long a; long b; long c; long d; void setup() { // the zero refers to the MAX7219 number, it is zero for 1 chip lc.shutdown(0,false);// turn off power saving, enables display lc.setIntensity(0,8);// sets brightness (0~15 possible values) lc.clearDisplay(0);// clear screen Serial.begin(9600); // if analog input pin 0 is unconnected, random analog // noise will cause the call to randomSeed() to generate // different seed numbers each time the sketch runs. // randomSeed() will then shuffle the random function. randomSeed(analogRead(0)); } void loop() { // genereer 4 x a random number from 0 to 9 en zet dit op de monitor a = random(10); b=random(10); c = random(10); d=random(10); Serial.print(a); Serial.print(b); Serial.print(c); Serial.println(d); delay(2000); //zet het getal van de monitor op een 4-digit display lc.setDigit(0,3,a,false); lc.setDigit(0,2,b,false); lc.setDigit(0,1,c,false); lc.setDigit(0,0,d,false); //maak het display weer leeg delay(1000); lc.clearDisplay(0); delay(1000); } |
Overigens ben ik wel van plan de codes die hiervoor zijn geplaatst nog even door te nemen waarvoor veel dank.
edit: in hoeverre de lage nummers zoals 0013 hiermee aan bod komen valt te bezien, dat zal wel een minpuntje zijn op deze manier.
edit2: valt reuze mee trouwens, net de monitor teruggekeken en zelfs 0004 is voorbij gekomen
Wat denken jullie, zal ik deze code op het arduino-platform zetten met de titel :
max7219/7221 random number generator display ?
Of op youtube ?
[ Voor 8% gewijzigd door kitao op 05-12-2012 22:22 ]
Verwijderd
Ik zag in het Arduino programma dat hier ook software voor was.kitao schreef op woensdag 05 december 2012 @ 19:59:
[...]
Je kunt er ook eén zelf bouwen zag ik ?
Sorry, ik heb hier echt geen verstand van mede daarom ook wi ik jouw post weer even onder de aandacht brengen.
http://www.ikalogic.com/i...ming-isp-for-atmel-chips/
===============
En complimenten voor die klok hierboven, echt een kunstwerk.
Ga het daar eerst eens mee proberen (heb boardjes in overvloed).
Maar terzijde, een losse USB-programmer lijkt mij wel handiger.
Ja die klok is ook mooi. Zeker met die buisjes. Meende dat ze
in Oost-Azie (weer) worden gemaakt. Lekker ruim opgezette
print ook.
Ik gebruik alleen de bootloader van de arduino. Is lekker lui programmerenIcekiller2k6 schreef op woensdag 05 december 2012 @ 19:15:
[...]
Om eerlijk te zijn ik snap niet waarom je in zo standalone dingen "arduino" gebruikt.. gebruik je de arduino bootloader..? of bedoel je gewoon dat je de arduino libraries gebruikt?
en nu wat ik echt wil zeggen vett.. me wantpcb ontwerp? ;-) & kostprijs?
Kostprijs is hoger uitgevallen dan geplanned.
De buishouders zijn eigenlijk aviation connectoren, bovenkant eraf gefreesd. Waren 3€/stuk. Heb alleen gezien dat ze nu per 6 op DX gaan voor 8$ (http://dx.com/p/diy-16mm-...ilver-5-piece-pack-134105).
buisjes komen van ebay. (http://www.ebay.com/itm/I...ain_0&hash=item5adec00f6a)
Behuizing custom made, voor 50€ aan zwart plexiglas gekocht, laten uitfrezen door een vriend en met elkaar verlijmd Hierna gladgeschuurd.
Ik raad aan bij de sockets, ik heb de 8 pin variant gebruikt omdat ik geen 9 kon vinden toen ik de klok bouwde, op DX verkopen ze ook de 9 pins variant. Neem die! Ik kan op dit moment de punt niet aansturen op de buisjes. 1 pin te weinig
En hiernaast gewoon het standaard electronica grut:
atmega328
ne555
4x HC595 shiftregister
DS1307 RTC chip
4 numitrons
zwik weerstanden en diodes (Omdat dit geen LED segmenten zijn krijg je anders een bleeding effect over de andere gloeidraaiden. Diodes zijn dus een must met deze tubes).
Denk al met al dat ik rond de 80 tot 100€ ben kwijtgeweest hieraan
[ Voor 15% gewijzigd door Bloodhoundje op 06-12-2012 13:42 ]
Precies, zo heb ik het ook gedaan met mijn binaire klok. Al heb ik een complete arduino gebruikt. Uiteindelijk heb je ook een stabiele voeding nodig en wil je gewoon een USB-aansluiting erop, en kom je er op uit dat gewoon een Arduino Nano erop zetten het makkelijkst is. Ik heb 'm op pinheaders op de achterkant gezet zodat je 'm er ook af kunt trekken, is het nog een "feature" ook.Technokiddy schreef op donderdag 06 december 2012 @ 13:39:
[...]
Ik gebruik alleen de bootloader van de arduino. Is lekker lui programmeren, PCB ontwerp heb ik niet. Alles opgebouwd uit mijn hoofd. Kan wel binnenkort even een schema ervan uitwerken.
Waar heb je dat vandaan dan? Ik had op bouwplastics.nl besteld en dat viel best mee qua prijs.Kostprijs is hoger uitgevallen dan geplanned.
Behuizing custom made, voor 50€ aan zwart plexiglas gekocht, laten uitfrezen door een vriend en met elkaar verlijmd Hierna gladgeschuurd.
Hoezo dat? Je hoeft ze toch niet te multiplexen als ze allemaal aan hun eigen shiftregister hangen?zwik weerstanden en diodes (Omdat dit geen LED segmenten zijn krijg je anders een bleeding effect over de andere gloeidraaiden. Diodes zijn dus een must met deze tubes).
Ik heb een variable input van 6-12 volt die erop mag. Vond ik zelf handiger ook voor als ik in de toekomst een andere adapter erbij pak, ik heb mijn plexiglas ook bij bouwplastic vandaan, 5mm dik plexiglas en een hele grote plaat. (heb er ook veel restmateriaal van over) De klok is opgebouwd uit 7 op elkaar gelijmde raamwerken met een deksel en onderplaat.mcDavid schreef op donderdag 06 december 2012 @ 15:35:
[...]
Precies, zo heb ik het ook gedaan met mijn binaire klok. Al heb ik een complete arduino gebruikt. Uiteindelijk heb je ook een stabiele voeding nodig en wil je gewoon een USB-aansluiting erop, en kom je er op uit dat gewoon een Arduino Nano erop zetten het makkelijkst is. Ik heb 'm op pinheaders op de achterkant gezet zodat je 'm er ook af kunt trekken, is het nog een "feature" ook.
[...]
Waar heb je dat vandaan dan? Ik had op bouwplastics.nl besteld en dat viel best mee qua prijs.
[...]
Hoezo dat? Je hoeft ze toch niet te multiplexen als ze allemaal aan hun eigen shiftregister hangen?
Je hoeft niet te multiplexen maar je hebt een common draad aan de tube. je krijgt lekspanning door de andere draden heen als je 2 of meer segmenten in gebruik hebt. Resulteert dat er andere segmenten zacht mee beginnen op te lichten. door een simpele diode te plaatsen bij elk segment ga je dit effect tegen
De arduino nano mag je ook met 6-12 volt voeden. Al had ik gewoon een USB-adaptertje eraan.
En ja ik had mijn plexiglas precies op maat besteld. Ik kan nog een klok maken (ga ik doen ook) en dan is het op.
En ja ik had mijn plexiglas precies op maat besteld. Ik kan nog een klok maken (ga ik doen ook) en dan is het op.
Alleen trekt de regulator op jouw arduino nano het niet als hij ook nog de tubes moet voorzien van prik. Ik zit met de brightness op max met een gebruik van +/-150ma per tube. dan zit je al rond de 600. midden segment zijn 2 gloeilampjes. die stoken ook 75ma/stuk weg zonder problemen. zitten we op 750ma. Ik heb expres geen 7805 gebruik omdat deze met alleen een koelblokje in een gesloten ruimte toch erg warm wordt.mcDavid schreef op donderdag 06 december 2012 @ 17:24:
De arduino nano mag je ook met 6-12 volt voeden. Al had ik gewoon een USB-adaptertje eraan.
En ja ik had mijn plexiglas precies op maat besteld. Ik kan nog een klok maken (ga ik doen ook) en dan is het op.
Is de opgegeven 22mA dan per gloeidraadje?Technokiddy schreef op donderdag 06 december 2012 @ 18:32:
[...]
Alleen trekt de regulator op jouw arduino nano het niet als hij ook nog de tubes moet voorzien van prik. Ik zit met de brightness op max met een gebruik van +/-150ma per tube.
Verwijderd
Dit is meestal zo met iets zelf bouwen. Maar dan heb je welTechnokiddy schreef op donderdag 06 december 2012 @ 13:39:
[...]
Kostprijs is hoger uitgevallen dan geplanned.
een eigen gemaat iets. Om bij mezelf kosten te besparen doe
ik ook aan ' reverse engeinering'. Oftwel, iets goedkoop halen
op eBay of DX en daarna zo vakkundig slopen dat het bij mij
in het ontwerp past.
Correct, per segment en niet voor de gehele buis.mr_obb schreef op donderdag 06 december 2012 @ 20:18:
[...]
Is de opgegeven 22mA dan per gloeidraadje?
Ik wilde twee van die lampjes aansluiten op een kleine accu met een zonnepaneeltje (een gesloopte solar charger voor een telefoon). Ik zal er even op moeten letten dat hij voldoende stroom kan leveren. De meeste van die accu's hebben een 1200 of 1500 mAh, dus dat is voldoende om de lampjes een paar uur te laten branden.
Verwijderd
Ik ben bezig met een ehternet shield, en bij een testprogramma geeft de IDE bij het compilen aan:
Estimated used SRAM memory: 1.883 bytes (of a 2048 byte maximum)
Warning: Large amount of SRAM memory used. Consider using PROGMEM or F("text") macro to reduce ram usage
het programma werkt dus wel gewoon.
het gaat om deze code:
ik heb geprobeerd om de rcswitch library te gebruiken in deze code maar dan geeft de arduino aan dat er teveel SRAM usage is en dat ik moet gaan kijken naar PROGMEM:
http://www.arduino.cc/en/Reference/PROGMEM
Onderaan die pagina staat een voorbeeld hoe je arrays of strings op kunt slaan in PROGMEM en hoe je die op kunt halen als string naar je ram.
als ik dat in mijn programma test (regel voor regel) werkt het bij de eerste 2 strings in het programma, maar bij de 3e werkt de webpagina niet meer, je kunt hem soms wel nog openen maar als je ergens op klikt dan blijft hij aangeven aanvraag wordt verstuurd.
als ik van regel 57 en 58 commentaar maakt en 59 niet meer dan werkt het wel gewoon weer. Ik heb ook al geprobeerd om die eerste stringen gewoon te laten staan en alleen de derde op te halen uit de array maar ook dat werkt niet.
Doe ik iets fout met het ophalen uit de array? of weet iemand misschien een andere manier om het gebruik van SRAM te verminderen?
* is ondertussen opgelost, weet niet wat het probleem was maar denk iets met verkeerde haakjes ofzo want na een aantal keer opnieuw proberen ging het werken zonder dat ik zelf door heb wat er nu anders is als toen ik het probleem hier plaatste
Estimated used SRAM memory: 1.883 bytes (of a 2048 byte maximum)
Warning: Large amount of SRAM memory used. Consider using PROGMEM or F("text") macro to reduce ram usage
het programma werkt dus wel gewoon.
het gaat om deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| // A simple web server to turn 2 LED on or off #include "etherShield.h" #include "ETHER_28J60.h" int outputPin = 6; // LED1 to pin 6 int anotherOutputPin = 7; // LED2 to pin 7 static uint8_t mac[6] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, static uint8_t ip[4] = { 192, 168, 1, 15}; // IP address for the webserver static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; void setup() { e.setup(mac, ip, port); pinMode(outputPin, OUTPUT); pinMode(anotherOutputPin, OUTPUT); } void loop() { char* params; if (params = e.serviceRequest()) { //strcpy_P(buffer, (char*)pgm_read_word(&(string_table[0]))); //e.print(buffer); e.print("<h1><a href='/?led1=off&led2=off'>Arduino Web Remote</a></h1>"); //strcpy_P(buffer, (char*)pgm_read_word(&(string_table[1]))); if (strcmp(params, /*buffer*/"?led1=on&led2=off") == 0) { digitalWrite(outputPin, HIGH); digitalWrite(anotherOutputPin, LOW); e.print("<a href='?led1=off&led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED1 IS ON</button></a><a href='?led1=on&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED2 IS OFF</button></a>"); } else if (strcmp(params, "?led1=off&led2=on") == 0) { digitalWrite(outputPin, LOW); digitalWrite(anotherOutputPin, HIGH); e.print("<a href='?led1=on&led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED1 IS OFF</button></a><a href='?led1=off&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED2 IS ON</button></a>"); } else if (strcmp(params, "?led1=off&led2=off") == 0) { digitalWrite(outputPin, LOW); digitalWrite(anotherOutputPin, LOW); e.print("<a href='?led1=on&led2=off'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED1 IS OFF</button></a><a href='?led1=off&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED2 IS OFF</button></a>"); } else if (strcmp(params, "?led1=on&led2=on") == 0) { digitalWrite(outputPin, HIGH); digitalWrite(anotherOutputPin, HIGH); e.print("<a href='?led1=off&led2=on'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED1 IS ON</button></a><a href='?led1=on&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED2 IS ON</button></a>"); } e.respond(); } } |
ik heb geprobeerd om de rcswitch library te gebruiken in deze code maar dan geeft de arduino aan dat er teveel SRAM usage is en dat ik moet gaan kijken naar PROGMEM:
http://www.arduino.cc/en/Reference/PROGMEM
Onderaan die pagina staat een voorbeeld hoe je arrays of strings op kunt slaan in PROGMEM en hoe je die op kunt halen als string naar je ram.
als ik dat in mijn programma test (regel voor regel) werkt het bij de eerste 2 strings in het programma, maar bij de 3e werkt de webpagina niet meer, je kunt hem soms wel nog openen maar als je ergens op klikt dan blijft hij aangeven aanvraag wordt verstuurd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| // A simple web server to turn 2 LED on or off #include "etherShield.h" #include "ETHER_28J60.h" #include <avr/pgmspace.h> prog_char string_0[] PROGMEM = "<h1><a href='/?led1=off&led2=off'>Arduino Web Remote</a></h1>"; // "String 0" etc are strings to store - change to suit. prog_char string_1[] PROGMEM = "?led1=on&led2=off"; prog_char string_2[] PROGMEM = "<a href='?led1=off&led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED1 IS ON</button></a><a href='?led1=on&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED2 IS OFF</button></a>"; prog_char string_3[] PROGMEM = "String 3"; prog_char string_4[] PROGMEM = "String 4"; prog_char string_5[] PROGMEM = "String 5"; PROGMEM const char *string_table[] = // change "string_table" name to suit { string_0, string_1, string_2, string_3, string_4, string_5 }; char buffer[100]; // make sure this is large enough for the largest string it must hold int outputPin = 6; // LED1 to pin 6 int anotherOutputPin = 7; // LED2 to pin 7 static uint8_t mac[6] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, static uint8_t ip[4] = { 192, 168, 1, 15}; // IP address for the webserver static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; void setup() { e.setup(mac, ip, port); pinMode(outputPin, OUTPUT); pinMode(anotherOutputPin, OUTPUT); } void loop() { char* params; if (params = e.serviceRequest()) { strcpy_P(buffer, (char*)pgm_read_word(&(string_table[0]))); e.print(buffer); strcpy_P(buffer, (char*)pgm_read_word(&(string_table[1]))); if (strcmp(params, buffer) == 0) { digitalWrite(outputPin, HIGH); digitalWrite(anotherOutputPin, LOW); strcpy_P(buffer, (char*)pgm_read_word(&(string_table[2]))); e.print(buffer); //e.print("<a href='?led1=off&led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED1 IS ON</button></a><a href='?led1=on&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED2 IS OFF</button></a>"); } else if (strcmp(params, "?led1=off&led2=on") == 0) { digitalWrite(outputPin, LOW); digitalWrite(anotherOutputPin, HIGH); e.print("<a href='?led1=on&led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED1 IS OFF</button></a><a href='?led1=off&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED2 IS ON</button></a>"); } else if (strcmp(params, "?led1=off&led2=off") == 0) { digitalWrite(outputPin, LOW); digitalWrite(anotherOutputPin, LOW); e.print("<a href='?led1=on&led2=off'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED1 IS OFF</button></a><a href='?led1=off&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED2 IS OFF</button></a>"); } else if (strcmp(params, "?led1=on&led2=on") == 0) { digitalWrite(outputPin, HIGH); digitalWrite(anotherOutputPin, HIGH); e.print("<a href='?led1=off&led2=on'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED1 IS ON</button></a><a href='?led1=on&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED2 IS ON</button></a>"); } e.respond(); } } |
als ik van regel 57 en 58 commentaar maakt en 59 niet meer dan werkt het wel gewoon weer. Ik heb ook al geprobeerd om die eerste stringen gewoon te laten staan en alleen de derde op te halen uit de array maar ook dat werkt niet.
Doe ik iets fout met het ophalen uit de array? of weet iemand misschien een andere manier om het gebruik van SRAM te verminderen?
* is ondertussen opgelost, weet niet wat het probleem was maar denk iets met verkeerde haakjes ofzo want na een aantal keer opnieuw proberen ging het werken zonder dat ik zelf door heb wat er nu anders is als toen ik het probleem hier plaatste
Hallo allemaal! Ik heb weer is een vaag probleem 
Zie onderstaande afbeelding:

Het 9v blok is eigenlijk 12volt maar dat zou niet uit moeten maken.
Ik heb dus een relays (http://www.ebay.com/itm/2..._trksid=p3984.m1497.l2649) welke ik gebruik om een electromagneet te activeren.
Door "low" te sturen op de arduino wordt het relay geactiveerd en kan er stroom lopen tussen de - en de + van de losse batterij.
Het 'activeren' van het relay gaat goed: de magneet wordt geactiveerd maar zodra ik hem DEactiveer 'crashed' de arduino (hij reset gewoon).
Ik heb ook al geprobeerd om de grounds te verbinden maar dit heeft geen effect.
Iemand enig idee hoe het zit?
Zie onderstaande afbeelding:

Het 9v blok is eigenlijk 12volt maar dat zou niet uit moeten maken.
Ik heb dus een relays (http://www.ebay.com/itm/2..._trksid=p3984.m1497.l2649) welke ik gebruik om een electromagneet te activeren.
Door "low" te sturen op de arduino wordt het relay geactiveerd en kan er stroom lopen tussen de - en de + van de losse batterij.
Het 'activeren' van het relay gaat goed: de magneet wordt geactiveerd maar zodra ik hem DEactiveer 'crashed' de arduino (hij reset gewoon).
Ik heb ook al geprobeerd om de grounds te verbinden maar dit heeft geen effect.
Iemand enig idee hoe het zit?
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
Heb je al geprobeerd het breadboard extern van 5V te voorzien, dus niet vanaf de uno mega ?
@post hierna
Geen idee of het werkt mattie, ik verzin maar wat.
@post hierna
Geen idee of het werkt mattie, ik verzin maar wat.
[ Voor 32% gewijzigd door kitao op 10-12-2012 15:14 ]
Nee en dat is ook niet echt een optie aangezien het een rijdende robot is 
Maargoed opzich kan ik het wel ff testen als ik thuis ben!
edit:
Zucht.... hetzelfde probleem als een tijdje geleden toen ik er ook al niks van snapte
mn batterij is gewoon leeg
Ik had het ook via USB getest maar ik was vergeten dat ik "vIN" had gepakt en dus alsnog via de batterij de stroom kreeg 
edit2:
Is er eigenlijk een manier om te zien hoeveel volt er 'in' de arduino gestopt wordt?
Maargoed opzich kan ik het wel ff testen als ik thuis ben!
edit:
Zucht.... hetzelfde probleem als een tijdje geleden toen ik er ook al niks van snapte
mn batterij is gewoon leeg
edit2:
Is er eigenlijk een manier om te zien hoeveel volt er 'in' de arduino gestopt wordt?
[ Voor 57% gewijzigd door Mattie112 op 10-12-2012 16:36 ]
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)
5Volt (via USB, of via spanningsregelaar)Mattie112 schreef op maandag 10 december 2012 @ 14:54:
Nee en dat is ook niet echt een optie aangezien het een rijdende robot is
Maargoed opzich kan ik het wel ff testen als ik thuis ben!
edit:
Zucht.... hetzelfde probleem als een tijdje geleden toen ik er ook al niks van snapte
mn batterij is gewoon leegIk had het ook via USB getest maar ik was vergeten dat ik "vIN" had gepakt en dus alsnog via de batterij de stroom kreeg
edit2:
Is er eigenlijk een manier om te zien hoeveel volt er 'in' de arduino gestopt wordt?
Gelijk maar je andere vraag beantwoorden:
Dit komt waarschijnlijk doordat de relais bij het uitschakelen heel kort een negatieve spanning op je arduino zet. Om dit te voorkomen moet je een diode in sper richting over je arduino uitgang zetten (oftewel: op je relais). Als de magneet nu uitschakeld en er een omgekeerde spanning op komt te staan wordt deze door de diode kortgesloten.Het 'activeren' van het relay gaat goed: de magneet wordt geactiveerd maar zodra ik hem DEactiveer 'crashed' de arduino (hij reset gewoon).
Ik heb ook al geprobeerd om de grounds te verbinden maar dit heeft geen effect.
Iemand enig idee hoe het zit?
Ja ik snap dat het 5V is maar ik wil graag meten hoeveel volt er daadwerkelijk in gaat zodat ik een berichtje kan laten zien als de accu (bijna) leeg is 
Dat het relais de arduino laat resetten heb ik nu geen last meer van, het is een relaymodule dus geen idee of het er standaard al op zit ;p Ik zal is kijken tussen mijn onderdelen of ik wat heb liggen anders dan kijk ik hoelang het zo goed blijft gaan.
Dat het relais de arduino laat resetten heb ik nu geen last meer van, het is een relaymodule dus geen idee of het er standaard al op zit ;p Ik zal is kijken tussen mijn onderdelen of ik wat heb liggen anders dan kijk ik hoelang het zo goed blijft gaan.
3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)