Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 20:30

BM

Moderator Spielerij
Je mist na de if op regel 65 een accolade volgens mij :)

C++:
1
2
3
4
5
6
7
8
9
10
11
12
void printDigits(int digits){ 
  // utility function for digital clock display: prints preceding colon and leading 0 
  Serial.print(":"); 
  lcd.print(":"); 
  if(digits < 10) 
  {
    Serial.print('0'); 
    lcd.print('0'); 
  }
  Serial.print(digits); 
  lcd.print(digits); 
}

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • naaitsab
  • Registratie: Augustus 2005
  • Laatst online: 21:44
Volgens mij pakt ie zonder accolades enkel de eerst volgende rij.
code:
1
2
if(digits < 10)  
Serial.print('0');

zou hetzelfde moeten doen als
code:
1
2
3
4
if(digits < 10)  
  { 
    Serial.print('0');  
  }

Dus theoretisch zou de uitvoer op de serial monitor wel goed moeten zijn en de LCD niet.

if (!coffee) {
Work = false; }


Acties:
  • 0 Henk 'm!

  • Raven
  • Registratie: November 2004
  • Niet online
Zo te zien hebben jullie gelijk, er moesten inderdaad accolades omheen. Je kan wel merken dat ik lang niet heb geprogrammeerd, dit had ik moeten weten :$

After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...

Oscar Wilde


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Woei! weer een stap verder :D

Mijn programmaatje (dat ik eerst voor de PC had geschreven om te testen) draait nu ook op mijn Arduino Mega :D Met een beetje prutswerk wordt nu zelfs dezelfde sourcecode gebruikt voor de pc-versie als voor Arduino :) (met behulp van een flink aantal defines en #ifdef's)

Ik maakte me eerst de meeste zorgen over de snelheid van de Atmel's, mijn programma moet namelijk minstens 10x per seconde een rondje kunnen draaien en ik vroeg me af of dat haalbaar was. Dat bleek niet nodig : mijn Mega draait nu alles met +- 80 rondjes per seconde af! Ik kan de Arduino dus zelfs nog een flink eind terugklokken!!!

Mijn tweede punt van zorgen was de hoeveelheid flash, ik was bang dat ik niet genoeg zou hebben aan 30K (ik weet dat de Mega veel meer heeft, maar ik zou alles het liefst in een Nano gaan draaien). Dat bleek ook niet nodig, de binary is nu 24.078 bytes (en als ik compileer voor Nano, zelfs nog iets kleiner :22.410 bytes. Weet iemand waar dat verschil van komt?!).

Waar ik me nooit zorgen over maakte : het gebruikte geheugen. En dat had ik nu juist wel moeten doen, want dat bleek dus uiteindelijk het heikele punt. Mijn programma wilde niet draaien op mijn Mega en ik snapte niet waarom... Uiteindelijk maar begonnen met strippen, functieaanroepen verwijderen en opeens werkte het... (nou ja, de alive-LED knipperde nog..) Nog wat prutsen later bleek dat het dus niet lag aan de functies die ik had verwijderd, als ik ze weer terugzette en andere weghaalde werkte het nog steeds.. Er begon me iets te dagen, en heb iets toegevoegd dat het verschil tussen de stack en de heappointer berekend en op de seriële poort zet.. en tja.. nog maar een paar honderd bytes over...

Ben nu de hele dag bezig geweest om het geheugengebruik terug te dringen, INT->CHAR en waar mogelijk alle bits van een INT gebruiken ipv meerdere arrays. Arrays-voor-het-gemak verwijderd en opgelost met extra code. Ik heb nu nog 3130 bytes over van de 8K. :P

Als ik dus nog 3K extra weet vrij te maken, dan gaat alles ook werken in een Nano (net aan), want de Nano is net zo snel, en de code past in 30K.

Ik had wel nog een paar vragen :

1) Kan ik mijn DS1307 ook gebruiken op een nano? Er zijn geen speciale SDA/SCL pinnen..
2) Het valt me op dat zodra ik een seriële poort definiëer op mijn Mega, ik zelf geen controle meer heb over de RX1,TX1,RX2,TX2,RX3 en TX3 pinnen. Maar ik heb genoeg aan 1 seriële poort (RX0 en TX0) en zou de andere 6 pinnen graag zelf nog willen gebruiken.. (eigenlijk zou ik RX1 en TX1 willen gebruiken om de klok te voeden).
3) Mijn applicatie loopt nu op maximale snelheid, 80 rondjes per seconde, maar ik wil maar 10 rondjes per seconde. Wat zou het makkelijkste zijn? werken met een interrupt of simpelweg iets maken met de functie millis()? Aan de andere kant : ik wil eigenlijk 10x iets doen per seconde van de RTC, en niet 10x op basis van de klok van de Arduino, want anders lopen dingen ongelijk. Ik zie het zo voor me :

mainloop
- wacht op seconde overgang van RTC
- lees aantal millis() (<-- eigenlijk zou het handiger zijn om het aantal millis op 0 te zetten, ivm overlopen)
- draai een rondje
loop 9x
-> wacht tot millis 100 hoger is, draai dan een rondje
terug naar mainloop

4) het valt me op dat de RTC niet super is.. In 2 weken tijd loopt de RTC 3 minuten voor. Dat is dus meer dan een uur per jaar. Niet acceptabel :D Hoe ga ik dat verbeteren?

5) Hoe klok ik mijn Arduino terug en (als ik dat doe), werkt de serïele communicatie en two-wire communicatie dan nog?

pfroet..

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
1) jawel, de chip is gewoon het zelfde, A4 en A5 (uit mijn hoofd) zijn de SDA/SCL pinnen.
2) geen idee... lees de hardware pagina op de arduino website even door.
3) ja zelf een timeout maken met millis() is het handigst. Gaat 1x in de 52 dagen een keer fout omdat millis() overloopt, dat is wel te overleven toch?
4) dan moet je er een nauwkeuriger kristal op solderen
5) een tragere oscilator erop solderen. Denk dat je met je seriele communicatie de baud-rates moet omrekenen en de wire-library kun je misschien zelf aanpassen.



Mijn baas heeft zo'n unit besteld voor een energiebesparing projectje:
http://www.sigma-shop.com...ller-one-channel-box.html
Een relay die je via USB kunt besturen dus.
zit gewoon een FTDI en een ATtiny chip op, dus basically een soort versimpelde arduino. Zou wel leuk zijn om 'm als tijdrelais te programmeren om te voorkomen dat mensen gaan kutten door dat ding tig keer achter elkaar aan- en uit te zetten. :)

[ Voor 29% gewijzigd door mcDavid op 20-01-2013 21:21 ]


Acties:
  • 0 Henk 'm!

  • ThijsE
  • Registratie: Januari 2013
  • Laatst online: 23-11-2024
Raven schreef op zondag 13 januari 2013 @ 14:58:
Nu ben ik met de DCF ontvanger van Conrad bezig. So far no luck :/
De sketch van http://thijs.elenbaas.net...io-clock-receiver-library blijft continu in de jaren 70 zitten, wordt dus niet op tijd gezet. ...
Nu draait die code, produceert de nodige output, maar de goede tijd helaas nog niet.
Hoi, Ik ben schrijver van de DCF77 bibliotheek waar je naar refereert. Het DCF signaal is een lastig signaal om goed te ontvangen: het is een lange golf signaal dat amplitude gemoduleerd is), en dat geeft een heleboel mogelijkheden tot ruis.

Heb je ook de sketches geprobeerd om te kijken hoe goed je signaal is?
Er is een sketch die je het ruwe signaal laat zien:
Afbeeldingslocatie: http://thijs.elenbaas.net/wp-content/uploads/2012/04/screenshot-2.png

En een sketch die je de puls tijden geeft
Afbeeldingslocatie: http://thijs.elenbaas.net/wp-content/uploads/2012/04/screenshot-2-misfire.png

Uitleg over het interpreteren vindt je hier:
http://thijs.elenbaas.net...io-clock-receiver-signal/

Typisch hebben de problemen te maken met stoorsignalen die binnenkomen via de voeding of via de antenne. Je kan het signaal proberen te optimaliseren terwijl je een van bovenstaande sketches draait:
  • Sluit een pull-up weerstand aan - dit heeft niet met ruis te maken, maar wordt soms vergeten
  • Gebruik een capacitieve bypass op de voeding - dit dempt stoorsignalen, zie schema op http://thijs.elenbaas.net...lock-receiver-hardware-2/
  • Pas de oriëntatie van de antenne aan - het signaal komt vanuit Duitsland
  • Gebruik 2 aard draden, twist er een met de voeding, en de ander met de signaal draad. - Dit verminderd door inductie opgepikte signalen
  • Leg je ontvanger niet te dicht bij je PC of voeding.
  • Voed je Arduino vanaf een batterij
Het is een beetje puzzelen, maar daar zit (wat mij betreft) ook wel weer de lol in. Succes!

ps. De library is hier te vinden: http://thijs.elenbaas.net...o-clock-receiver-library/. Ik ben met een versie bezig die nog robuuster is tegen ruis,

Acties:
  • 0 Henk 'm!

  • Raven
  • Registratie: November 2004
  • Niet online
Ehm, als jij dat inderdaad bent, het zou leuk zijn als je op reacties reageert die op http://thijs.elenbaas.net...iver-library/#comment-437 geplaatst worden ;) Die van mij staat al een week op "Je reactie wacht op goedkeuring." :/

Maar als je wat verder leest in dit topic, sinds ik een andere interrupt pin dan pin 2 gebruik werkt het, pin 2 bleek in gebruik door het ethernet shield en daardoor dwars te liggen...


Maar ondanks dat het werkt even op jouw punten te reageren:
- Sluit een pull-up weerstand aan - dit heeft niet met ruis te maken, maar wordt soms vergeten
Had ik meteen gedaan, zoals op jouw site staat.

- Gebruik een capacitieve bypass op de voeding - dit dempt stoorsignalen, zie schema op http://thijs.elenbaas.net...lock-receiver-hardware-2/
Ook vanaf het begin gedaan.

- Pas de oriëntatie van de antenne aan - het signaal komt vanuit Duitsland
Tsja, deze is wat lastig. Kwam laatst een Franse website tegen die aangaf dat de antenne 90 graden gedraaid moest worden bij het richten op de zendmast. Dus loodrecht op de richting daarnaar toe.
http://www.mon-club-elec....rielCapteurModuleDCF77Pro
"La bâtonnet de ferrite doit idéalement être perpendiculaire à la direction de la ville de Francfort d'où est émis le signal. "

Dat is dan ook meteen de enige site die dat aangeeft, de rest die ik heb gezien zeggen niks over het positioneren.

- Gebruik 2 aard draden, twist er een met de voeding, en de ander met de signaal draad. - Dit verminderd door inductie opgepikte signalen
Hoe doe je dat als je geen randaarde ter beschikking hebt?

- Leg je ontvanger niet te dicht bij je PC of voeding.
Toen ik er eenmaal achter kwam dat ik een in gebruik zijnde interrupt pin gebruikte en een andere pakte werkte het meteen, ook ondanks dat mijn pc + de 9v adapter er minder dan 1 meter vandaan waren.

- Voed je Arduino vanaf een batterij
Geprobeerd, Arduino valt gelijk weer uit. Uitgangsspanning van 9v blok misschien te laag(?).

[ Voor 77% gewijzigd door Raven op 21-01-2013 11:01 ]

After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...

Oscar Wilde


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Dan moet je 9V blok echt dood zijn, want die mag wel wat minder dan 9V zijn voordat arduino het niet doet.

Over de antenne, je franse informatie is correct. Monopool en dipool antennes (waar draadjes onder vallen) hebben geen ontvangst in het verlengde van de antenne, en maximaal haaks op de antenne.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ik probeer een simpel stukje code werkend te krijgen, maar ik krijg het niet voor elkaar. Ik wil een motor met rotatie encoder opstarten, een stukje laten lopen en dan weer in 3 snelheden laten afremmen (om zo de eindpositie precies te halen). Het opstarten gaat zonder problemen, maar op de één of andere manier gaat hij niet afremmen, terwijl de pulsen van de rotatie encorder (DrvSensTach) wel doorlopen. De Serial.prinln ("MoveBackward 200") wordt niet weergegeven. Wat gaat er fout? :? Is het iets met die while-loops?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  DrvSensTach = 0;
  for (int i=0; i<256; i++)
  {
    MoveBackward (i);
    delay (5);
  }
  Serial.println ("MoveBackward 255");
  while (DrvSensTach < 30) //wait until tach reaches 30
  {
  }
  Serial.println ("MoveBackward 200");
  MoveBackward (200);
  while (DrvSensTach < 50) //wait until tach reaches 50
  {
  }
  Serial.println ("MoveBackward 127");
  MoveBackward (127);
  while (DrvSensTach < 60) //wait until tach reaches 60
  {
  }
  Serial.println ("Brake");
  Brake();

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Raven
  • Registratie: November 2004
  • Niet online
furby-killer schreef op maandag 21 januari 2013 @ 11:37:
Dan moet je 9V blok echt dood zijn, want die mag wel wat minder dan 9V zijn voordat arduino het niet doet.

Over de antenne, je franse informatie is correct. Monopool en dipool antennes (waar draadjes onder vallen) hebben geen ontvangst in het verlengde van de antenne, en maximaal haaks op de antenne.
7.18v aldus multimeter.... Heb al eens gemerkt dat deze blokjes (Ansmann) niet zo heel erg geweldig zijn, 9v Eneloops heb ik nog niet kunnen vinden.

After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...

Oscar Wilde


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
almightyarjen schreef op maandag 21 januari 2013 @ 11:40:
Ik probeer een simpel stukje code werkend te krijgen, maar ik krijg het niet voor elkaar. Ik wil een motor met rotatie encoder opstarten, een stukje laten lopen en dan weer in 3 snelheden laten afremmen (om zo de eindpositie precies te halen). Het opstarten gaat zonder problemen, maar op de één of andere manier gaat hij niet afremmen, terwijl de pulsen van de rotatie encorder (DrvSensTach) wel doorlopen. De Serial.prinln ("MoveBackward 200") wordt niet weergegeven. Wat gaat er fout? :? Is het iets met die while-loops?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  DrvSensTach = 0;
  for (int i=0; i<256; i++)
  {
    MoveBackward (i);
    delay (5);
  }
  Serial.println ("MoveBackward 255");
  while (DrvSensTach < 30) //wait until tach reaches 30
  {
  }
  Serial.println ("MoveBackward 200");
  MoveBackward (200);
  while (DrvSensTach < 50) //wait until tach reaches 50
  {
  }
  Serial.println ("MoveBackward 127");
  MoveBackward (127);
  while (DrvSensTach < 60) //wait until tach reaches 60
  {
  }
  Serial.println ("Brake");
  Brake();
compileert dat met al die puntkomma's achter je whiles? haal ze iig eens weg.
-edit- ben ik nou blind of heb je ze net weg geedit? :o
Raven schreef op maandag 21 januari 2013 @ 11:43:
[...]

7.18v aldus multimeter.... Heb al eens gemerkt dat deze blokjes (Ansmann) niet zo heel erg geweldig zijn, 9v Eneloops heb ik nog niet kunnen vinden.
Als dat onder load gemeten is zou je arduino nog moeten werken.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ik had de puntkomma's zelf ook net opgemerkt (had ze in de post ook al verwijderd), hij compileert gewoon maar geen verandering in gedrag: nog precies hetzelfde probleem...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Raven
  • Registratie: November 2004
  • Niet online
mcDavid schreef op maandag 21 januari 2013 @ 12:03:
[...]


Als dat onder load gemeten is zou je arduino nog moeten werken.
Zonder load, Arduino gaat maar fractie van een sec aan als ik de batterij eraan hang. Heb de 2 9v blokjes die hier liggen eens in de batterijniveau meter gestopt, zo te zien zijn ze weer leeggelopen. :/

After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...

Oscar Wilde


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

mcDavid schreef op maandag 21 januari 2013 @ 12:03:
[...]
compileert dat met al die puntkomma's achter je whiles? haal ze iig eens weg.
-edit- ben ik nou blind of heb je ze net weg geedit? :o
Ja, weg geedit, was er zelf ook al achter gekomen al was dat niet het probleem, zie vorige post ;)

Hij doet het nu in één keer wel. In de ISR voor de rotatie encoder had ik voor elke puls nog
code:
1
Serial.println (DrvSensTach);

staan. Kan het zijn dat de serial overbelast wordt oid waardoor de hele Arduino niet meer goed werk? :?

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • mr_obb
  • Registratie: Juni 2001
  • Laatst online: 01-09 14:15

mr_obb

Lakse Perfectionist

De Serial-communicatie gebruikt zelf ook weer interrupts, dus het kan daardoor inderdaad rommelig worden.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ah, duidelijk... Rustig aan met de serial-communicatie dus :P

Ik heb het zaakje nu in een procedure gezet, maar het heeft weer precies hetzelfde probleem: hij start op tot 255, maar blijft daarna op deze snelheid rijden zonder af te remmen terwijl de waarde van DrvSensTach wel gewoon blijft oplopen (tot voorbij alle waarden van de while-loops). Het lijkt of het programma blijft hangen na de Serial.println ("255"). Het maakt trouwens niet uit als ik deze regel weghaal.

Ik heb het idee dat ik iets chronisch fout doe, al zie ik niet wat. Iemand een idee? :?

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
void MoveBackwardPulses ()
{
  int Pulses = 70;
  TurningWheels = false;
  DrvSensTach = 0;
  for (int i=0; i<256; i++)
  {
    MoveBackward (i);
    delay (5);
  }
  Serial.println ("255");
  Pulses2 = Pulses - 40;
  while (DrvSensTach < Pulses2) 
  {
  }
  MoveBackward (200);
  Serial.println ("200");
  Pulses2 = Pulses - 20;
  while (DrvSensTach < Pulses2)
  {
  }
  MoveBackward (127);
  Serial.println ("127");
  Pulses2 = Pulses - 10;
  while (DrvSensTach < Pulses2)
  {
  }
  MoveBackward (75);
  Serial.println ("75");
  while (DrvSensTach < Pulses)
  {
  }
  Brake();
}

[ Voor 90% gewijzigd door almightyarjen op 21-01-2013 12:51 ]

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
DrvSensTach wordt door interrupt bijgewerkt ofzo? Is die wel als volatile gedefinieerd?

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ja en nee, die was niet als volatile gedefinieerd. Nu wel en het werkt :D Bedankt! Maar ik vraag me af he: als de serieële communicatie wel de goede waarde van DrvSensTach weergeeft ondanks het niet volatile declareren, hoe kan het dan toch niet werken?

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
De wegen van de compiler zijn mysterieus :P

Maar die seriele communicatie gebeurde vanuit de ISR? Daarin optimaliseert hij het niet, omdat hij daar nog wel begrijpt dat hij erbij hoort. Maar in je main code begrijpt hij niet dat de ISR buiten zijn programma om wordt aangeroepen, en dus optimaliseert hij het maar weg.

Al blijft het soms een beetje mysterieus wat de compiler doet (voor mij iig). Want de compiler weet wel dat die functie een ISR is, iig hij optimaliseert niet de complete ISR code weg (gelukkig). Waarom is hij dan niet slim genoeg om te beseffen dat alle variabelen die in een ISR worden gewijzigd niet weggeoptimaliseerd moeten worden?

Anyway komt eropneer gewoon altijd volatile declareren als het in een ISR wordt aangepast.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ja, bij het controleren of de DrvSensTach opliep gebeurde de seriele communicatie vanuit de ISR. Het is allemaal een beetje vaag inderdaad maar de les van vandaag zoals je al zei: gewoon altijd volatile declareren bij gebruik in een ISR :P

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Iemand ervaring met PROGMEM? Ik probeer wat data in de flash op te slaan, maar het wil maar niet lukken :

[code]
#include <avr/pgmspace.h>

const char PROGMEM blabla1=1;
const char blabla2 PROGMEM=1;
char blabla3 PROGMEM=1;
char PROGMEM blabla4=1;
prog_char blabla5 PROGMEM=1;
prog_char PROGMEM blabla6=1;
PROGMEM prog_char blabla7=1;
PROGMEM char blabla8=1;
[/code]

levert me allemaal dezelfde foutmelding op bij het compileren :

[code]
/sim.c:91: warning: '__progmem__' attribute ignored
/sim.c:92: warning: '__progmem__' attribute ignored
/sim.c:93: warning: '__progmem__' attribute ignored
/sim.c:94: warning: '__progmem__' attribute ignored
/sim.c:95: warning: '__progmem__' attribute ignored
/sim.c:96: warning: '__progmem__' attribute ignored
/sim.c:97: warning: '__progmem__' attribute ignored
/sim.c:98: warning: '__progmem__' attribute ignored
[/code]

Volgens mij heb ik elke variant wel zo'n beetje gehad die ik op internet ben tegengekomen, en toch wil het niet.. Volgens Arduino.cc zou het PROGMEM prog_char blabla=1; moeten zijn..

Dit is trouwens als ik de variabelen declareer in een functie, declareer ik een variabele globaal, dan krijg ik weer de volgende foutmelding..

[code]
/sim.c:21: warning: only initialized variables can be placed into program memory area
[/code]

Och ja, als ik in een functie dezelfde 10 varianten probeer, maar ze static maak, krijg ik ook de 'only initialized variables can be placed into program memory area' fout.. Terwijl ik ze toch echt initialiseer..


Heb de boel even op de serial gegooid en gek genoeg werkt het wel (ondanks de warnings).

In een functie declareer ik mijn array dus als :

code:
1
static PROGMEM prog_int16_t naam_van_array[aantal_ints] = {0,1,2,3,...};


en daarna kan ik het uitlezen met
code:
1
pgm_read_word_near(naam_van_array + i)


Toch wil ik graag van die warnings af.. (alhoewel ze me onterecht lijken!!)

Woei! van 3130 bytes free naar 5354 bytes free gesprongen :D 6K free here I come :9

[ Voor 30% gewijzigd door WVL_KsZeN op 21-01-2013 23:08 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • Mattie112
  • Registratie: Januari 2007
  • Laatst online: 12-09 16:32
Ik zit nu al een paar dagen te kloten om mijn robot (met 2 servo's) "rechtdoor" te laten rijden. Hoe ik ook kloot met speeds e.d. de ene keer heeft hij een afwijking naar rechts en de andere keer naar links echt ongelooflijk.

Weet iemand een makkelijke//snelle//simpele manier om dat ding nou echt "recht" te laten rijden? Het is geen optie om de wielen te verbinden met een soort as aangezien de robot ook moet kunnen draaien.

3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Feedback is enige optie die daarvoor werkt.

Als hij bijvoorbeeld een lijn moet volgen is het geen probleem als hij een beetje scheef rijdt, dat past hij zelf wel aan. Als hij gewoon rechtdoor moet rijden zonder externe referenties zal je iets nodig hebben waarmee je precies kan bepalen hoeveel rondjes de motoren draaien. Bijvoorbeeld een optische encoder op je wielen, of stappenmotoren.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Daarnaast zijn servomotoren ook altijd vrij onnauwkeurig waardoor je die afwijking krijgt. De afwijking zal waarschijnlijk al kleiner zijn als je stappenmotoren of motoren met een optische encoder gebruikt zonder feedback. Maar voor helemaal recht rijden heb je feedback nodig. Kijk hier eens: http://www.robotc.net/wik...ncoders_to_drive_straight

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Mattie112
  • Registratie: Januari 2007
  • Laatst online: 12-09 16:32
Hm daar was ik al bang voor. Bedankt voor de info in elk geval :)

3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Wanneer moet je eigenlijk pull-up weerstanden gebruiken bij de I2C bus? Als ik een I2C apparaat eraan hang zonder pull-up weerstanden werkt het allemaal naar behoren. Ik ben van plan meerdere I2C apparaten aan de bus te hangen, zijn dan de pull-up weerstanden wel noodzakelijk of zitten die al op de Arduino? (volgens mij niet)

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Springuin
  • Registratie: Juli 2002
  • Laatst online: 11-09 20:13
Op een I2C bus moeten altijd pullups; of je gebruikt de pullups van de pinnen van de arduino of je voegt ze zelf toe.
Als je de interne pullups wilt gebruiken zou het volgende moeten werken:
code:
1
2
3
4
5
  pinMode(A4, INPUT);
  digitalWrite(A4, HIGH);
  pinMode(A5, INPUT);
  digitalWrite(A5, HIGH);
  Wire.begin();

De interne pullups zijn 20-50k, dat is wat aan de hoge kant; dus ik zou zelf als het even kan voor externe pullups van 10k of 4k7 kiezen.

[ Voor 17% gewijzigd door Springuin op 22-01-2013 14:45 ]


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ah, duidelijk... Dan ga ik inderdaad voor externe...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 20:30

BM

Moderator Spielerij
Kleine update op mijn LCD verhaaltje van vorige week :)
In parallel mode werkt ie wel (met PSB op High dus), maar dan verschijnen er her en der ook artifacts in beeld. Lijkt me dus dat er ergens in het LCD/board iets niet helemaal goed gaat. Binnenkort dx.com eens lastig gaan vallen :)

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ik heb dat volgens mij ook wel eens gehad.. Probeer eens een ontkoppel condensator oid...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
OK, probleempje met het kunnen gebruiken van TX1 en RX1 tijdens seriële communicatie is ook opgelost.. Er bleek nooit een probleem te zijn geweest, alleen een meetsnoer dat niet helemaal lekker meer was.. daar worden we niet vrolijk van :(

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Weer even aan het klooien geweest:
Arduino 1: voor aansturing aandrijf- en stuurmotoren van robot en LCD
Arduino 2: aansturing van de rest en uitlezing digitaal kompas

Arduino 2 leest het digitaal kompas uit en stuurt de waarde via I2C naar Arduino 1 die het op een LCD zet. Ik sta er versteld van hoe simpel het allemaal gaat :D

Afbeeldingslocatie: http://i92.photobucket.com/albums/l20/almightyarjen/DSC00958-1_zpsf6d13668.jpg

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Jeuj, projectje is weer wat gevorderd :)

Gisteravond de random generator aan de praat gekregen en vanavond is het me gelukt het geheugengebruik zo ver terug te dringen dat de applicatie nu ook op mijn UNO draait :9 Zelfs nog 300 bytes geheugen over!

Volgende klusje was het netjes synchroniseren van het lopen van de rondjes (10x per seconde) met de seconde-overgangen van de RTC.

Het werkt als volgt :

in loop() zit alleen een if-statement, die kijkt of er een seconde-overgang is geweest. Zo niet, dan wordt er delay(10) uitgevoerd. Zo ja, dan wordt de if uitgevoerd en wordt mijn applicatie 10x aangeroepen. Iedere keer wordt uitgerekend hoe lang de functie-aanroep kostte, en de overige milliseconden wordt er gedelayed. (er wordt per seconde 9x gedelayed, de laatste delay vind dus plaats in loop met de delay(10)).

Overigens wel raar : hetzelfde programma op de Mega gebruikt meer geheugen. Ik heb het vermoeden dat dat ligt aan de hoeveelheid flash (32KB op UNO -> 2 bytes om te adresseren vs 256KB op de Mega2560 -> 3 bytes om te adresseren), maar zeker weten doe ik het niet.. De applicatie voor de UNO is ook meer dan een kilobyte kleiner, ondanks dat het exact dezelfde code is (uitgezonderd van het verschuiven van wat pinnen met een paar defines..)

In ieder geval doet mijn applicatie het, de shift-registers doen het, de RTC doet het, de applicatie loopt netjes 10x per seconde en de seriële communicatie doet het ook nog eens :)

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • jwsmid
  • Registratie: Februari 2004
  • Laatst online: 29-06-2024
Na een paar weken spelen met de uno en de eerste ervaring met C/C+ en het nu kunnen uitlezen van een serial data en dit kunnen weergeven op een LCD wil ik de data wat opdelen met punten tussen de cijfers.

De getallen die binnen komen is bv 15654730 ik geef dit nu zo door naar de LCD maar wil wat beter weergeven op de LCD.

bv. 15654730 moet 156.547.30 worden hoe kun je dit makelijk oplossen?

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Hoe worden de getallen ingevoerd? "156" "enter" "547" "enter" "30" "enter"? In dat geval kan je na elke leesopdracht van de serial een punt toevoegen en het geheel opslaan in een char[] en daarna in zijn geheel versturen naar de LCD

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 18:52
Als het 1 getal in een LONGINT zit. dan kan je het met delen

15654730 / 100000 = 156
15654730 % 100000 = 54730
54730 / 100 = 547
54730 % 100 = 30

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • jwsmid
  • Registratie: Februari 2004
  • Laatst online: 29-06-2024
ik krijg de getallen via een librarie binnen
zie :

unsigned long getFreqMode();

lcd.setCursor(0, 0);
lcd.print(rig.getFreqMode());
lcd.print("MHz ");

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 18:52
unsigned long getFreqMode();

Dit is even grof:

unsigned long x,y,z;

z = rig.getFreqMode())
x = z / 10000;
z = z % 10000;
y = z / 100;
z = z % 100;

lcd.setCursor(0, 0);

lcd.print(x);
llcd.print('.');
cd.print(y);
lcd.print('.');
lcd.print(z);
lcd.print("MHz ");

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • jwsmid
  • Registratie: Februari 2004
  • Laatst online: 29-06-2024
Het werkt bedankt SnowDude

Nu kan ik verder om het een en ander uit te proberen, heb onder tussen en motor shield binnen ik wil een 12 volt motor aansturen.

Als ik de een extrene voeding op de motor shield aansluit wordt de uno ook dan ook gelijk van spanning voorzien, en wordt de usb spanning van de pc gelijk geblokkeerd?

Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 18:38
Vraagje heeft hier ooit iemand met dit gewerkt:
Afbeeldingslocatie: http://thumbs1.ebaystatic.com/d/l225/m/mkpFRZI_4dEDcQMYvNIv_DA.jpg
Zoja enig idee hoe je dat moet aansluiten?

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


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Icekiller2k6 schreef op vrijdag 25 januari 2013 @ 17:30:
Vraagje heeft hier ooit iemand met dit gewerkt:
[afbeelding]
Zoja enig idee hoe je dat moet aansluiten?
En wat moge het zijn? Beetje klein plaatje enzo...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 18:38
"DC 12V 20 Key Matrix DIY Flat Membrane Switch Control Keypad New"
http://www.ebay.com/itm/D...ageName=RSS:B:SHOP:US:101
weinig info over hoe je het moet aansluiten vind ik...

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


Acties:
  • 0 Henk 'm!

  • mr_obb
  • Registratie: Juni 2001
  • Laatst online: 01-09 14:15

mr_obb

Lakse Perfectionist

20 toetsen, 9 draadjes tel ik zo. Lijkt me dat het aangestuurd wordt als eeen matrix keypad, van 4x5 in dit geval. Maar iets meer info over wat het is, is inderdaad welkom.

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
Zo te zien gewoon een matrix-keypad ja. Maar dan met een venstertje erin waar je een LCD-display achter zou kunnen plakken ofzo. Even googlen op "arduino matrix keypad" kom je geheid een hoop info tegen.

Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 05-09 16:01
Mattie112 schreef op dinsdag 22 januari 2013 @ 08:34:
Ik zit nu al een paar dagen te kloten om mijn robot (met 2 servo's) "rechtdoor" te laten rijden. Hoe ik ook kloot met speeds e.d. de ene keer heeft hij een afwijking naar rechts en de andere keer naar links echt ongelooflijk.

Weet iemand een makkelijke//snelle//simpele manier om dat ding nou echt "recht" te laten rijden? Het is geen optie om de wielen te verbinden met een soort as aangezien de robot ook moet kunnen draaien.
Dit is een beetje een slag in de lucht omdat ik er zelf niet aan toe ben gekomen - ben aan het inlezen voor draadloze modules en heb de onderdelen ook niet - maar terwijl ik vandaag het laatste hoofdstuk van dit boek doornam, kwam ook de boe-bot een beetje in beeld.
Hoewel ik dat nu niet gaat opzoeken, heb genoeg gelezen voor vandaag, wordt er met die bot dat gebruik maakt van servo's als aandrijving een compass en/of een accelerometer op aangesloten. Ik vermoed dat je met die twee sensoren een rechte(re) lijn kunt rijden maar ik garandeer het niet.
In dit gratis boek valt meer te lezen over die 2 instrumentjes en kun je eventueel zelf bepalen, of van anderen die er wel praktijk mee hebben, of je er wat aan hebt.

ps, dat laatste boek heb ik slechts gelezen tot aan het hoofdstuk Ping, vandaar een 'slag in de lucht'

[ Voor 3% gewijzigd door kitao op 26-01-2013 16:15 . Reden: ps ]


Acties:
  • 0 Henk 'm!

  • jwsmid
  • Registratie: Februari 2004
  • Laatst online: 29-06-2024
Goede morgen
Ik heb weer een probleem
Ik heb aan mijn UNO een i2c/serial LCD-keypad controller hangen

(http://web4robot.com/LCDCtrl.html)

Het werkt op zich goed kan de LCD en Keypad via i2c aansturen en uitlezen.
Bij het uitlezen van Keypad krijg ik een waarde van 1 tot 16 afhankelijk welke key ik indruk.

Ik wil nu een 9 cijferige code intypen en deze vervolgens ergens anders weergebruiken (in het programma)

Het indrukken van de code en weergeven op de LCD dat lukt .

Maar de hoe ik krijg ik een code die ik als een variabele kan gebruiken?

En hoe krijg ik automatisch een punt tussen de drie cijfers op de LCD?
(123.456.789) ipv (123456789)
De oplossing zal wel eenvoudig maar voor een beginner is dit moeilijk .
(met het key # (waarde 15) kom ik uit de While lus)

Het volgende stukje heb ik :

void input()
{
lcd.begin();
lcd.setCursor(0,0);
lcd.print("geef de code");

lcd.setCursor(0,1);
lcd.blink();
int dataByte = lcd.keypad();
while (dataByte != 15 ){

dataByte = lcd.keypad();

if (dataByte == 1 ) { lcd.print("1"); }
if (dataByte == 2 ) { lcd.print("2"); }
if (dataByte == 3 ) { lcd.print("3"); }
if (dataByte == 5 ) { lcd.print("4"); }
if (dataByte == 6 ) { lcd.print("5"); }
if (dataByte == 7 ) { lcd.print("6"); }
if (dataByte == 9 ) { lcd.print("7"); }
if (dataByte == 10 ) { lcd.print("8"); }
if (dataByte == 11 ) { lcd.print("9"); }
if (dataByte == 14 ) { lcd.print("0"); }
}

lcd.noBlink();
lcd.begin();
}

Acties:
  • 0 Henk 'm!

Verwijderd

Hoe kan in mijn Vendor-Id veranderen?

Ik heb een (zelfbouw)kastje met daarop een ATtiny45. De ATtiny doet niks anders dan
de USB-code omzetten naar I2C. Maar de ATtiny heeft een Vendor-id. Dus kan dat
zelbouwkastje alleen gebruiken met de bijbehorende vrij verkrijgbare software.

Nu wil ik de ATtiny vervangen door de ATmega 2560. De 16u2 doet precies hetzelfde
als de ATtiny. Alleen het formaat is dan serieel. Dat seriele wil ik dan doorsturen
met een sketch naar I2C. Maar om de ATmega 2560 'zichtbaar' te maken voor de
software (die eigenlijk alleen die ATtiny wil zien) zal ik de Vendor-id moeten veranderen.

Wie weet in welk stukje software de Vendor-id staat die ik dan kan veranderen?
Om daarna als 'nieuwe' bootloader via ICSP kan uploaden naar de 16u2.

Acties:
  • 0 Henk 'm!

  • Dutch Lion
  • Registratie: Maart 2009
  • Laatst online: 31-08 18:45
jwsmid schreef op dinsdag 29 januari 2013 @ 00:58:
verhaal...

Maar de hoe ik krijg ik een code die ik als een variabele kan gebruiken?

En hoe krijg ik automatisch een punt tussen de drie cijfers op de LCD?
(123.456.789) ipv (123456789)
De oplossing zal wel eenvoudig maar voor een beginner is dit moeilijk .
(met het key # (waarde 15) kom ik uit de While lus)

Het volgende stukje heb ik :

void input()
{
lcd.begin();
lcd.setCursor(0,0);
lcd.print("geef de code");

lcd.setCursor(0,1);
lcd.blink();
int dataByte = lcd.keypad();
while (dataByte != 15 ){

dataByte = lcd.keypad();

if (dataByte == 1 ) { lcd.print("1"); }
if (dataByte == 2 ) { lcd.print("2"); }
if (dataByte == 3 ) { lcd.print("3"); }
if (dataByte == 5 ) { lcd.print("4"); }
if (dataByte == 6 ) { lcd.print("5"); }
if (dataByte == 7 ) { lcd.print("6"); }
if (dataByte == 9 ) { lcd.print("7"); }
if (dataByte == 10 ) { lcd.print("8"); }
if (dataByte == 11 ) { lcd.print("9"); }
if (dataByte == 14 ) { lcd.print("0"); }
}

lcd.noBlink();
lcd.begin();
}
Wil je het als een string of een int opslaan? Want als string is volgens mij nogal makkelijk. In plaats van dat je het print stop je het telkens achterin in je string erbij. Daarna kun je die string in één keer printen of misschien kun je dan eerst die punten ook nog wel er tussen knutselen. Ik ben alleen totaal niet thuis in arduino dus vraag me niet om de juiste syntax.

Edit: Even gezocht, ik denk dat je hier wel wat mee kunt:
http://arduino.cc/en/Reference/StringConcat
en voor de punt:
http://arduino.cc/en/Reference/StringSetCharAt

[ Voor 5% gewijzigd door Dutch Lion op 31-01-2013 08:09 ]

"it's better to live one day as a lion, than a hundred years as a lamb."


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben op het moment bezig met een ontwerp voor een hardwarematige QWERTY DVORAK converter. Het sturen naar de pc sec gaat goed, het ontvangen gaat ook goed. Alleen beide tegelijk doet hij alleen de eerste toets goed en daarna random shit.

Iemand ideen waar het aan kan liggen? Zou het kunnen dat doordat het ontvangen erbij zit de delays van het versturen niet meer kloppen?

Mart

ps ik ben arduino leek
pps. als het werkt wil ik het gaan printen en verspreiden^^
ppps.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <ps2dev.h>

PS2dev keyboard(3, 2); // PS2dev object (2:clock 3:clock)

unsigned char enabled = 0;

const byte DataInPin = 8;
const byte IRQInPin =  5;

const byte pows[]   = {1, 2, 4, 8, 16, 32, 64, 128, 256};
const byte DVORAK[] = {82, 65, 49, 77, 53, 43, 52, 33, 45, 75, 74, 85, 68, 36, 60, 67, 35, 51, 44, 49, 27, 78, 76, 21, 59, 66, 34, 50, 29, 42, 26, 84, 91};
const byte QWERTY[] = {21, 29, 36, 45, 44, 53, 60, 67, 68, 77, 84, 91, 27, 35, 43, 52, 51, 59, 66, 75, 76, 82, 26, 34, 33, 42, 50, 49, 65, 73, 74, 78, 85};

byte iter = 0;
byte value = 0;
byte bytes = 0;

void ack() 
{
  while(keyboard.write(0xFA));
}

int keyboardcommand(int command) {
  unsigned char val;
  switch (command) {
  case 0xFF:
    ack();
    while(keyboard.write(0xAA)!=0);
    break;
  case 0xFE:
    ack();
    break;
  case 0xF6:
    ack();
    break;
  case 0xF5:
    enabled = 0;
    ack();
    break;
  case 0xF4:
    enabled = 1;
    ack();
    break;
  case 0xF3:
    ack();
    keyboard.read(&val);
    ack();
    break;
  case 0xF2:
    ack();
    keyboard.write(0xAB);
    keyboard.write(0x83);
    break;
  case 0xF0:
    ack();
    keyboard.read(&val);
    ack();
    break;
  case 0xEE:
    keyboard.write(0xEE);
    break;
  case 0xED:
    ack();
    keyboard.read(&val);
    ack();
    break;
  }
}

void setup() {
  Serial.begin(9600);
  Serial.println("Start...");
  
  pinMode(IRQInPin, INPUT);
  pinMode(DataInPin, INPUT);
  
  while(keyboard.write(0xAA)!=0)
    delay(250);
  Serial.println("Output connection made");
  delay(10);
}

void loop() 
{
  /*unsigned char c;
  if((digitalRead(3)==LOW) || (digitalRead(2) == LOW)) 
  {
    while(keyboard.read(&c));
    keyboardcommand(c);
    reset();
  }
  else
  {
    int tval = digitalRead(IRQInPin);
    if(tval==0 && value!=0)
    {
      if(iter>0 && iter<9 && digitalRead(DataInPin)==HIGH)
      {
        bytes += pows[iter-1];
      }
      iter++;
      if(iter==11)
        process(bytes);
      
    }
    value = tval;
    delayMicroseconds(5);
  }
}

void reset()
{
  iter = 0; value = 0; bytes = 0;
}

void process(byte b)
{
  for(int i = 0; i<33; i++)
  {
    if(b == QWERTY[i])
    {
      b = DVORAK[i];
      break;
    }
  }
  keyboard.write(b);
  //Serial.println(b);
  iter = 0; value = 0; bytes = 0;
}

[ Voor 72% gewijzigd door Verwijderd op 31-01-2013 09:47 ]


Acties:
  • 0 Henk 'm!

  • Mattie112
  • Registratie: Januari 2007
  • Laatst online: 12-09 16:32
Laat anders even je code zien anders wordt het wel heel lastig om te zien wat er fout gaat.

3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)


Acties:
  • 0 Henk 'm!

  • Mattie112
  • Registratie: Januari 2007
  • Laatst online: 12-09 16:32
@dopefish
Delay's zijn altijd klote en moet je eigenlijk vermijden. Zie zo 123 niet iets fout aan je code. Wat doet het als je de delay weghaalt?

Zelf zit ik atm ook ff te kloten.

Stel:
Ik heb een LED en 4 buttons.
De led wil ik laten knipperen zoals dit:
led aan
delay(pulsetime)
led uit
delay(delaytime)

maw: ik wil de AAN én de UIT tijd van de LED kunnen besturen met de buttons.

Nou zit ik daar dik mee te kloten. Via delays werkt het wel maar dan werken mn knoppen niet meer dus heb ik gebruik gemaakt van een library als "timer". Maar hoe ga ik dit nu regelen :)
Ik wil bijvoorbeeld de LED 1000ms aan hebben en dan 50 uit maar wat ik ook doe, hij blijft gewoon even lang aan als uit.
Dit is mijn code nu:

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "test.h"

const int buttonDelayIncPin = 2;    // the number of the pushbutton pin
const int buttonDelayDecPin = 3;
const int buttonPulseIncPin = 4;
const int buttonPulseDecPin = 5;
const int ledPin = 13;      // the number of the LED pin
//const int relayPin = 8;

int state = LOW;
bool pulsebool = false;
bool delaybool = true;

SimpleTimer timer;
int pulsinterval = 10;
int pulscounter = 0;
int delayinterval = 10;
int delaycounter = 0;

AdvButton buttonDelayInc(buttonDelayIncPin, DelayInc, 100, 10000, btn_Digital);
AdvButton buttonDelayDec(buttonDelayDecPin, DelayDec, 100, 10000, btn_Digital);
AdvButton buttonPulseInc(buttonPulseIncPin, PulseInc, 100, 10000, btn_Digital);
AdvButton buttonPulseDec(buttonPulseDecPin, PulseDec, 100, 10000, btn_Digital);

int pulsetime = 1000;
int delaytime = 50;

void setup()
{
    Serial.begin(9600);
    Serial.println("start");
    pinMode(ledPin, OUTPUT);
//  pinMode(relayPin, OUTPUT);

    timer.setInterval(pulsinterval, pulse);
    pulscounter = pulsetime;
    timer.setInterval(delayinterval, delayvoid);
    delaycounter = delaytime;
    timer.setInterval(1000, printding);
}

void printding()
{
    Serial.print("Delay: ");
    Serial.println(delaytime);
    Serial.print("Pulse: ");
    Serial.println(pulsetime);
    Serial.print("delaybool: ");
    Serial.println(delaybool);
}

void pulse()
{
    if (pulsebool)
    {
        pulscounter = pulscounter - pulsinterval;

        if (pulscounter <= 0)
        {
            Serial.println("pulsecounter is 0");
            //doe iets
            if (state == LOW)
            {
                state = HIGH;
            }
            else
            {
                state = LOW;
            }

            digitalWrite(ledPin, state);
            pulscounter = pulsetime;
            delaybool = true;
            pulsebool = false;
        }
    }
}
void delayvoid()
{
    if (delaybool)
    {
        delaycounter = delaycounter - delayinterval;
        if (delaycounter <= 0)
        {
            if (!pulsebool)
            {
                pulsebool = true;
                delaybool = false;
            }
            else
            {
                pulsebool = true;
            }
            delaycounter = delaytime;
        }
    }
}

void DelayInc(AdvButton* but)
{
    delaytime += 50;
}
void DelayDec(AdvButton* but)
{
    delaytime -= 50;
    if (delaytime < 0) delaytime = 0;
}
void PulseInc(AdvButton* but)
{
    pulsetime += 50;
}
void PulseDec(AdvButton* but)
{
    pulsetime -= 50;
}

void loop()
{
    ButtonManager::instance()->checkButtons();
    timer.run();
//  Serial.print("Delay: ");
//  Serial.println(delaytime);
//  Serial.print("Pulse: ");
//  Serial.println(pulsetime);

}


Paar opmerkingen:
- de buttons is een library, dat werkt verder prima
- de timer maak ik meerdere malen aan, 1 voor pulsetime en 1 voor delaytime (en 1 voor debug output)

Als iemand een beter idee heeft dan houd ik me ook aanbevolen!

3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)


Acties:
  • 0 Henk 'm!

  • Dutch Lion
  • Registratie: Maart 2009
  • Laatst online: 31-08 18:45
Ik heb niet specifiek verstand van Arduino.

Maar snap wel dat het met delay niet werkt want dat is gewoon busy waiting. Ik weet niet of Arduino ook RTOS functies heeft die dus een niet busy wait kunnen doen. Dat zou dan een optie zijn.

Je zou ook met interrupts voor je buttons kunnen werken.

"it's better to live one day as a lion, than a hundred years as a lamb."


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 11-09 23:32
Ik heb onlang een meduino nano (met atmega328 op 16MHz) op ebay gekocht en ik zou deze graag als i2c slave aan m'n raspberry Pi koppelen. Op zich is dat geen probleem (zie hier)

Ik zou de meduino nano willen gebruiken om enkele analoge inputs (in mijn gevat CT sensor zoals in dit project) en enkele digitale inputs (220V detecteren via ledschakeling en een interface naar Nikobus)

Wat ik me echter afvraag is of de meduino nano krachtig genoeg is om alles samen te doen? Of neem ik beter een aparte meduino nano voor de Nikobus interface en eentje voor andere inputs?

Concreet werkt de nikobus als volgt: continu luisteren op de bus als er iets langskomt en op vraag ook iets verzenden en het eventuele antwoord dan verzenden.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ligt een beetje aan op welke frequentie die nikobus werkt. Daarnaast kan je wellicht een interrupt instellen op de RX pin, dan staat die atmega waarschijnlijk alleen maar uit z'n neus te vreten.

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Een hele korte google verteld me dat nikobus gewoon via RS232 gaat. Als dat klopt dan verwacht ik niet dat hij meer dan 0.1% van zijn processing power nodig heeft om alles wat je noemt af te handelen. Een microcontroller heeft echt meer dan zat rekenkracht voor zulk soort dingen.

Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 11-09 23:32
De frequentie van de nikobus (niet via rs232 maar rechtstreeks op de bus) is volledig afhankelijk van het gebruik ervan: als je op een knop drukt dan komt er iets over de bus / Als je commando stuurt (bv geef je status op) dan komt er ook een antwoord.
Het lijkt me dus correct om te zetten dat de frequentie meestal heel laag is, alleen vroeg ik me af wat de belasting van de rest was :3x ct sensor uitlezen om de seconde / spanningsmeting doen op een andere analoge pin / kijken naar 3 digitale inputs van de 220V led en nog eens die CT/spanning herrekenen.

Deze zijn immers niet kritiek (een seconde later heb je een nieuw resultaat), maar de Nikobus die stuurt het signaal niet opnieuw, dus die wil ik niet missen.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Mattie112 schreef op donderdag 31 januari 2013 @ 19:26:
@dopefish
Delay's zijn altijd klote en moet je eigenlijk vermijden. Zie zo 123 niet iets fout aan je code. Wat doet het als je de delay weghaalt?

Zelf zit ik atm ook ff te kloten.

Stel:
Ik heb een LED en 4 buttons.
De led wil ik laten knipperen zoals dit:
led aan
delay(pulsetime)
led uit
delay(delaytime)

maw: ik wil de AAN én de UIT tijd van de LED kunnen besturen met de buttons.

Nou zit ik daar dik mee te kloten. Via delays werkt het wel maar dan werken mn knoppen niet meer dus heb ik gebruik gemaakt van een library als "timer". Maar hoe ga ik dit nu regelen :)
Ik wil bijvoorbeeld de LED 1000ms aan hebben en dan 50 uit maar wat ik ook doe, hij blijft gewoon even lang aan als uit.
Dit is mijn code nu:

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "test.h"

const int buttonDelayIncPin = 2;    // the number of the pushbutton pin
const int buttonDelayDecPin = 3;
const int buttonPulseIncPin = 4;
const int buttonPulseDecPin = 5;
const int ledPin = 13;      // the number of the LED pin
//const int relayPin = 8;

int state = LOW;
bool pulsebool = false;
bool delaybool = true;

SimpleTimer timer;
int pulsinterval = 10;
int pulscounter = 0;
int delayinterval = 10;
int delaycounter = 0;

AdvButton buttonDelayInc(buttonDelayIncPin, DelayInc, 100, 10000, btn_Digital);
AdvButton buttonDelayDec(buttonDelayDecPin, DelayDec, 100, 10000, btn_Digital);
AdvButton buttonPulseInc(buttonPulseIncPin, PulseInc, 100, 10000, btn_Digital);
AdvButton buttonPulseDec(buttonPulseDecPin, PulseDec, 100, 10000, btn_Digital);

int pulsetime = 1000;
int delaytime = 50;

void setup()
{
    Serial.begin(9600);
    Serial.println("start");
    pinMode(ledPin, OUTPUT);
//  pinMode(relayPin, OUTPUT);

    timer.setInterval(pulsinterval, pulse);
    pulscounter = pulsetime;
    timer.setInterval(delayinterval, delayvoid);
    delaycounter = delaytime;
    timer.setInterval(1000, printding);
}

void printding()
{
    Serial.print("Delay: ");
    Serial.println(delaytime);
    Serial.print("Pulse: ");
    Serial.println(pulsetime);
    Serial.print("delaybool: ");
    Serial.println(delaybool);
}

void pulse()
{
    if (pulsebool)
    {
        pulscounter = pulscounter - pulsinterval;

        if (pulscounter <= 0)
        {
            Serial.println("pulsecounter is 0");
            //doe iets
            if (state == LOW)
            {
                state = HIGH;
            }
            else
            {
                state = LOW;
            }

            digitalWrite(ledPin, state);
            pulscounter = pulsetime;
            delaybool = true;
            pulsebool = false;
        }
    }
}
void delayvoid()
{
    if (delaybool)
    {
        delaycounter = delaycounter - delayinterval;
        if (delaycounter <= 0)
        {
            if (!pulsebool)
            {
                pulsebool = true;
                delaybool = false;
            }
            else
            {
                pulsebool = true;
            }
            delaycounter = delaytime;
        }
    }
}

void DelayInc(AdvButton* but)
{
    delaytime += 50;
}
void DelayDec(AdvButton* but)
{
    delaytime -= 50;
    if (delaytime < 0) delaytime = 0;
}
void PulseInc(AdvButton* but)
{
    pulsetime += 50;
}
void PulseDec(AdvButton* but)
{
    pulsetime -= 50;
}

void loop()
{
    ButtonManager::instance()->checkButtons();
    timer.run();
//  Serial.print("Delay: ");
//  Serial.println(delaytime);
//  Serial.print("Pulse: ");
//  Serial.println(pulsetime);

}


Paar opmerkingen:
- de buttons is een library, dat werkt verder prima
- de timer maak ik meerdere malen aan, 1 voor pulsetime en 1 voor delaytime (en 1 voor debug output)

Als iemand een beter idee heeft dan houd ik me ook aanbevolen!
Zonder echt te snappen wat je ermee wilt: In de Setup() zet je 3x timer.setInterval achter elkaar. Hierdoor verander je telkens de serviceroutine die de timer moet aanroepen bij een overflow. In dit geval zal hij dus alleen de laatste (printding) gaan koppelen aan een overflow (elke 1000ms)...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ik zit een simpele klok te maken welke 6 7-segments displays aanstuurt voor hh:mm:ss.
Ik heb 3 bytes welke de uren, minuten en seconden bevatten.
ik moet die bytes splitsen; als het aantal uren bijvoorbeeld "15" is, dan wil ik daar twee bytes van maken, met de waarden "1" en "5" om het display per segment aan te kunnen sturen. Dit geldt uiteraard ook voor de minuten en de seconden.

Is er een makkelijk foefje om dit te realiseren? :? Ik kan wel 60 if-statements per tijdseenheid gaan schrijven, maar volgens mij moet het makkelijker kunnen :D

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
floor(minutes/10)
en minutes%10

[ Voor 30% gewijzigd door mcDavid op 07-02-2013 23:47 ]


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Thanks. Is die floor() geen officiële routine ofzo? De compiler pakt hem wel, maar ik zie er maar weinig uitleg over (iig niet op de officiële site)..

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
floor() rond naar beneden af, ceiling() rond naar boven af. (let altijd op bij negatieve getallen, afronden doet dan soms wat je niet verwacht).

Overigens is floor() niet nodig bij int's of char's, er wordt bij delen altijd naar beneden afgerond als het resultaat geen getallen achter de komma kan bevatten. Floor() kun je dus ook gewoon weglaten in dit geval.

dus :

(int)5/(int)10 = 0

[ Voor 4% gewijzigd door WVL_KsZeN op 08-02-2013 14:08 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
almightyarjen schreef op vrijdag 08 februari 2013 @ 12:15:
Thanks. Is die floor() geen officiële routine ofzo? De compiler pakt hem wel, maar ik zie er maar weinig uitleg over (iig niet op de officiële site)..
Het grootste gedeelte van de standaard C functies werkt gewoon.
WVL_KsZeN schreef op vrijdag 08 februari 2013 @ 14:00:
Overigens is floor() niet nodig bij int's of char's, er wordt bij delen altijd naar beneden afgerond als het resultaat geen getallen achter de komma kan bevatten. Floor() kun je dus ook gewoon weglaten in dit geval.

dus :

(int)5/(int)10 = 0
toch vind ik het wel prettig in dit geval, met floor() is ten minste gelijk duidelijk wat die regel doet.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

mcDavid schreef op vrijdag 08 februari 2013 @ 15:06:
toch vind ik het wel prettig in dit geval, met floor() is ten minste gelijk duidelijk wat die regel doet.
Eensch. Ondanks dat het niets toevoegt maakt het het lezen van de code eenvoudiger.

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Hallo allemaal,

ik ben bezig met een looplichtje aan het maken van 16 leds. Het programma geeft een fout aan(zie in het oranje). Wat doe ik fout?

Afbeeldingslocatie: http://i45.tinypic.com/4j44lc.png

Alvast bedankt voor de moeite!!

Groeten,
Tom

Acties:
  • 0 Henk 'm!

  • triet
  • Registratie: Januari 2003
  • Niet online
Precies wat er staat: hij verwachtte een ')' voor de ';' . Dus zoek naar ';'. Dan kom je op de B00100000 etc. waar direct een ; achter staat...

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Je gebruikt een ; ipv een ,

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Als ik een , ipv ; komt de foutmelding 'at this point in file'

Sorry als ik domme vragen stel, ik snap niet veel van engels.

Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 23:56

Harrie

NederVlaming

Ik vermoed dat je dus shiftOut(datapin, clockpin, MSBFIRST,B0010000); moet doen.

Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Harrie schreef op zaterdag 09 februari 2013 @ 17:07:
Ik vermoed dat je dus shiftOut(datapin, clockpin, MSBFIRST,B0010000); moet doen.
Dat is toch voor 1 shiftregister?
of begrijp ik je nu fout?

Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 23:56

Harrie

NederVlaming

tommie14 schreef op zaterdag 09 februari 2013 @ 17:09:
[...]


Dat is toch voor 1 shiftregister?
of begrijp ik je nu fout?
Ik ben niet zo bekend met arduinos, maar als je bijvoorbeeld hier kijkt, accepteert de ShiftOut functie maximaal 4 argumenten. http://arduino.cc/en/Reference/shiftOut

Ik denk dat als je 16 bits naar buiten wilt schuiven, je gewoon eerst de eerste 8, en daarna de 2e 8 wilt doen?

Dus zoiets:
shiftOut(datapin, clockpin, MSBFIRST,B0010000);
shiftOut(datapin, clockpin, MSBFIRST,B0000000);

Je shift registers zijn normaal gekoppeld, zodat de eerste 8 door het eerste register schuiven en in de 2e terecht komen. Zie hier: http://www.arduino.cc/en/Tutorial/ShiftOut
Het blauwe lijntje tussen de 2 registers op dit schema zorgt daarvoor: http://arduino.cc/en/uploads/Tutorial/ShftOut_Schm2.gif

Of misschien werkt dit ook wel:
shiftOut(datapin, clockpin, MSBFIRST,B001000000000000);
waarmee je dan dus alle 16 tegelijk naar buiten schuift. Maar ik heb geen idee of ShiftOut dit accepteert.

[ Voor 47% gewijzigd door Harrie op 10-02-2013 00:21 ]


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Harrie schreef op zaterdag 09 februari 2013 @ 17:12:
[...]


Dus zoiets:
shiftOut(datapin, clockpin, MSBFIRST,B0010000);
shiftOut(datapin, clockpin, MSBFIRST,B0000000);

[/s]
Als je dat doet gaat er toch eerst het 3e ledje branden en daarna geen een. of ben ik nou zo gek.

Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 23:56

Harrie

NederVlaming

tommie14 schreef op zaterdag 09 februari 2013 @ 18:35:
[...]


Als je dat doet gaat er toch eerst het 3e ledje branden en daarna geen een. of ben ik nou zo gek.
Op deze manier gaat het 3e ledje van de 16 branden.
Wil je het 3e ledje van de eerste 8 leds, en bijvoorbeeld het 5e ledje van de 2e 8 leds, doe je dus:

digitalWrite(latchPin, LOW);
shiftOut(datapin, clockpin, MSBFIRST,B0010000); //eerste 8 leds
shiftOut(datapin, clockpin, MSBFIRST,B0000100); //2e 8 leds
digitalWrite(latchPin, HIGH);

Leds gaan pas aan of uit als je de latchpin hoog maakt.

[ Voor 5% gewijzigd door Harrie op 09-02-2013 18:57 ]


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Dit is wat ik nu heb, maar hij doet nu hele rare dingen. De eerste acht bits doen het normaal. daarna gaan er verschillende rode en groene lampjes branden.
(rood is 1t/m8, groen is 8t/m16)
Is er wat fout?

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
82
83
84
int clockpin = 2;
int datapin = 3;
int latchpin = 4;

void setup(){
  pinMode(clockpin,OUTPUT);
  pinMode(datapin,OUTPUT);
  pinMode(latchpin,OUTPUT);
}

void loop(){
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000001);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000010);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000100);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00001000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00010000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00100000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B01000000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
  digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B10000000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
   digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00000001);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00000010);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00000100);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00001000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00010000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B00100000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B01000000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
     digitalWrite(latchpin,LOW);
  shiftOut(datapin, clockpin, MSBFIRST, B00000000);
  shiftOut(datapin, clockpin, MSBFIRST, B10000000);
  digitalWrite(latchpin, HIGH);
  delay(1000);
}

Acties:
  • 0 Henk 'm!

  • Harrie
  • Registratie: November 2000
  • Laatst online: 23:56

Harrie

NederVlaming

Je zou eigenlijk elke keer de volgende status van alle 16 bits/leds moeten wegschrijven, dat maakt het veel eenvoudiger.

Ook denk ik dat je volgorde aan het eind niet helemaal klopt. De bit die je als eerste weg schrijft, komt uiteindelijk terecht bij de de laatste groene led in de rij (die het verst weg zit van de roden). (Ik ga er dan wel even vanuit dat je het hetzelfde als in het voorbeeld hebt aangesloten).

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
 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B10000000); //groen
 shiftOut(datapin, clockpin, MSBFIRST, B00000000); //rood
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B01000000);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00100000);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00010000);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

//ik laat er hier even een paar weg

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00000001);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 shiftOut(datapin, clockpin, MSBFIRST, B10000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 shiftOut(datapin, clockpin, MSBFIRST, B01000000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 shiftOut(datapin, clockpin, MSBFIRST, B00100000);
 digitalWrite(latchpin, HIGH);
 delay(1000);

//en zo verder tot de laatste:

 digitalWrite(latchpin,LOW);
 shiftOut(datapin, clockpin, MSBFIRST, B00000000);
 shiftOut(datapin, clockpin, MSBFIRST, B00000001);
 digitalWrite(latchpin, HIGH);
 delay(1000);


Zijn je schuif registers aangesloten zoals in het schema in het voorbeeld? In het schema is iets geks, en staan pinnen in een andere volgorde (verkeerde) weergeven... Dus dat schema wat ik eerder noemde moet je voorzichtig mee zijn. Dat zou kunnen verklaren dat je raar gedrag krijgt.

Echter deze afbeelding is volgens mij correct:
Afbeeldingslocatie: http://arduino.cc/en/uploads/Tutorial/ShftOutExmp2_3.gif

Vergelijk ook met de datasheet:
http://www.sparkfun.com/datasheets/IC/SN74HC595.pdf

[ Voor 14% gewijzigd door Harrie op 10-02-2013 00:20 ]


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Ik heb nu precies gedaan wat harrie zei.

dit gebeurt er nu.

View My Video

hoe komt dit?

Ik heb verschillende shiftregisters geprobeerd.
de ledjes raken elkaar ook niet.

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Kloppen de waardes die je stuurt naar de shiftregisters wel?

Zet eens een condensatortje (100nF) tussen GND en RCK?

[ Voor 37% gewijzigd door WVL_KsZeN op 10-02-2013 18:04 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • tommie14
  • Registratie: Juni 2011
  • Laatst online: 02-04-2023
Wat is de rck? Ik zie dat nergens op het lay-out .
Is dat de latchpin? Daar heb ik namelijk al een condensator overheen staan van 1 uf.

[ Voor 46% gewijzigd door tommie14 op 11-02-2013 09:36 ]


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Ja, dat is de latchpin :) probeer eens een iets kleinere condensator? Is je draadje van de latchpin van het 2e shiftregister goed aangesloten? Anders even een beetje mee pielen?

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • Rusky
  • Registratie: December 2000
  • Laatst online: 29-08 12:59
is hier misschien ook iemand die de arduino gebruikt om assembler te programeren? via de atmel avr studio of iets dergelijks?
Ik wil me namelijk iets breder gaan orienteren als alleen arduino (uno heb ik nu liggen). En vroeg me af het bevalt om dit te doen via de arduino?

mijn pc


Acties:
  • 0 Henk 'm!

  • Bloemstukje
  • Registratie: December 2008
  • Laatst online: 12-09 09:45
Rusky schreef op maandag 11 februari 2013 @ 14:46:
is hier misschien ook iemand die de arduino gebruikt om assembler te programeren? via de atmel avr studio of iets dergelijks?
Ik wil me namelijk iets breder gaan orienteren als alleen arduino (uno heb ik nu liggen). En vroeg me af het bevalt om dit te doen via de arduino?
Ik heb Atmega's geprogrammeerd in Assembly, via een STK500 op AVR studio met WINAVR. Heb er niet bijster veel ervaring mee moet ik eerlijk toegeven (veel meer C gebruikt). Ik heb alleen geen idee in hoeverre je Arduino hier nog voor kan gebruiken.

Assembly programmeren doe je normaal gesproken alleen als je snelheid te kort komt, ik denk dat het dan sowieso niet aan te raden is om Arduino te gaan gebruiken :).

gewoon nee.


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Ik heb het vroeger via avr studio gedaan, best een hoop (zo erin gerold ooit, achteraf niet heel handig). Maar als je wat dieper erop in wilt gaan als arduino zou ik gewoon wat naar C kijken en dan gewoon direct zelf registers aansturen. Dan kan je nog wel Serial gebruiken voor debuggen bijvoorbeeld.

Je kan wel een keertje assembly programma maken die LED laat knipperen bijvoorbeeld, moet je wel rekening mee houden als je dat vanuit avr studio doet je de arduino bootloader zal overschrijven. En assembly kan best een stukje efficienter zijn, gezien dat iig de avr-gcc compiler nogal voorzichtig volgens mij is met gebruik van registers. Terwijl atmels zoveel registers hebben dat je niet snel het SRAM hoeft te gebruiken.

Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 11-09 23:32
Ik ben bezig met wat te programmeren voor de Nikobus interface met Arduino.
Ik heb een Meduino Nano bordje (dus eigenlijk hetzelfde als de arduino nano)

In bascom heb ik het werkend, en had ik een detectie van een "rising" interupt nodig.
Klopt het dat bij de nano er maar 2 pinnen zijn die dit kunnen? namelijk pin digital 2 en 3? (die interupt 0 en 1 respectievelijk geven).
Ik had immers jammer genoeg m'n bordje zo gemaakt dat ik ging inlezen op pin digital 10 :( (kwam beter uit qua layout...)

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Ja, klopt, external interrupts zitten op pinnen 2 en 3... Dat wordt je bordje aanpassen ;)

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Klopt niet. Alle pinnen van een atmega328 kunnen interrupt spelen. Volgens mij zitten die specifieke interrupt pinnen er voornamelijk nog voor backwards compatibility. Ze zijn een klein beetje anders dan de algemene interrupt die op elke pin geplaatst kan worden, ze hebben als voordeel dat je ze beter kan instellen, maar als nadeel dat ze geen rising edge interrupt kunnen triggeren als de atmega in sleep mode staat (ze hebben een klok nodig om dat te detecteren).

Maar alle pinnen kunnen als interrupt worden gebruikt, voornaamste beperking is dat het pin-change interrupts zijn: het maakt hem niet uit of hij van hoog naar laag gaat of andersom, hij triggered altijd. Maar voor de meeste applicaties is daar wel mee te werken: of je zorgt dat interrupt uit staat als falling edge komt, of je begint interrupt met een check of de pin nu hoog of laag is, dan weet je welke edge je hebt gehad.

Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Bij de attachInterrupt() moet je echter het interrupt nummer opgeven, hoe weet je welke dat is? :?

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 11-09 23:32
Ik heb ondertussen het zekere voor het onzekere genomen en spoortje doorgedremeld en verbonden met pin 2 ;-)
@almightyarjen: meer info staat op deze pagina (link) meestal is pin2 int0 en pin 3 int1 - je kan ook het pinnummer opgeven soms

Voor m'n domotica zou ik een crc16 moeten kunnen berekenen, maar via google kwam ik niet echt veel wijzer.
In bascom doe ik: (let niet teveel in de slordige code, ik ben echte een leek in bascom)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Teller007b = 1
   Teller008b = 23

   Do
    Tempstrb = Mid(nb_string5 , Teller008b , 2)
    Crc(teller007b) = Hexval(tempstrb)
    Incr Teller007b
    Decr Teller008b
    Decr Teller008b
   Loop Until Teller007b > 10

   Aant_crcb = 10
   Res_crcb = Hex(crc16uni(crc(1) , Aant_crcb , &HFFFF , &H1021 , 0 , 0))
   Nb_string = Mid(res_crcb , 3 , 2) + Mid(res_crcb , 1 , 2) + Mid(nb_string5 , 5 , 20)


maar hoe vertaal ik dit nu in iets dat hetzelfde doet voor een arduino?

  • boazkl0p
  • Registratie: Augustus 2009
  • Laatst online: 21-08 20:30

boazkl0p

Schijnbaar een Fries

Ik heb een mcp3304 aangesloten op de arduino volgens deze uitleg. Ik heb de code hiervan ook gebruikt. Tot nu toe heb ik de volgende dingen aangepast:

code:
1
byte commandbits = B11000000; //command bits - start, mode, chn (3), dont care (3)

In de datasheet van mijn mcp3304 staat praktisch hetzelfde, alleen om differential te kunnen meten, en dus ook daadwerkelijk 13-bit resolutie te krijgen, heb ik van de tweede 1 een 0 gemaakt. Dit zou hem in differential mode moeten zetten.

code:
1
2
//read bits from adc
  for (int i=11; i>=0; i--){

Van die 11 heb ik een 12 gemaakt. Mijn eerste gedachte zou zijn om hier een 13 van te maken maar dan gaf hij getallen groter dan 2^13 terug.

Nu is alles mooi aangesloten, maar hij blijft onzingetallen geven.... Kan iemand mij vertellen wat ik verder nog moet doen om dit werkend te krijgen?

[ Voor 11% gewijzigd door boazkl0p op 14-02-2013 10:35 ]


  • Harrie
  • Registratie: November 2000
  • Laatst online: 23:56

Harrie

NederVlaming

Weet je zeker dat de 3e en 4e bit ook de juiste waarde hebben, zodat het kanaal wat hij gaat lezen ook daadwerkelijk de pinnen zijn die je wilt gaan meten. (differential meet het verschil tussen 2 pinnen, dus je hebt aan 2 pinnen iets aangesloten neem ik aan).

Werkt het wel in de standaard mode?

Weet je zeker dat hij differential 13 bits uitgeeft? Ik kan daar niets van vinden in de datasheet.

[ Voor 134% gewijzigd door Harrie op 14-02-2013 20:08 ]


  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Volgens mij doet-ie gewoon 13 bits: de DAC is 13 bit, ongeacht hoe het ingangssignaal wordt aangeboden.

Als alle command bits 0 zijn, dan is channel 0 IN+. Sluit je het signaal qua polariteit wel goed aan? En wat Harrie zegt: kijk eerst even of je hem aan de praat krijgt in standard mode...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Ik had toch nog een vraagje over zo'n chinees DS1307-moduletje.

Afbeeldingslocatie: http://i1074.photobucket.com/albums/w415/dejun_wung/02-10.jpg

Zo'n dingetje dus, met oplaadbare li-ion batterij.

Het is me 100% duidelijk hoe de klok werkt, maar ik vroeg me af of ik nog iets speciaals moest doen om de batterij te laden opladen. Er is eigenlijk nergens een handleiding te vinden en ik vraag me af of ik de BAT pin moet aansluiten of niet.. Is de BAT pin bedoeld om de batterij op te laden, of kun je er juist ander klein spul mee voeden? Er is nergens een specificatie te vinden..

Ik heb nu alleen GND,VCC,SDA en SCL aangesloten.. moet ik de BAT pin ook op 5V aansluiten?

Als het bordje geen spanning heeft, dan staat er overigens 2,884V tussen BAT en GND. Als ik spanning op het bordje zet (5V tussen GND en VCC), dan stijgt de spanning naar 3,062V. Of dit nu komt doordat de batterij geladen wordt, of doordat de batterij geen stroom meer hoeft te leveren naar de DS1307 (geen stroom geleverd door de batterij => hogere spanning) is me helaas niet duidelijk....

[ Voor 29% gewijzigd door WVL_KsZeN op 17-02-2013 22:36 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Heb je dat dingetje al werkend zonder de BAT aan te sluiten dan?

Ik heb trouwens twee van deze jongens:

Afbeeldingslocatie: https://dlnmh9ip6v2uc.cloudfront.net/images/products/1/1/4/4/1/11440-01_medium.jpeg
https://www.sparkfun.com/products/11441

het werkt allemaal perfect, van één van de displays heb ik het I2C adres gewijzigd, werkte ook perfect. De spanning is er een paar keer af gegaan en het werkte nog steeds. En zo in eens was het gewijzigde display zijn I2C "vergeten" en stond die weer op de factory setting. Dit is me nu al een paar keer overkomen. Iemand enig idee waar dit aan kan liggen? :?

[ Voor 81% gewijzigd door almightyarjen op 17-02-2013 22:50 ]

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • tweakG5
  • Registratie: April 2010
  • Laatst online: 12-09 17:05
Ik heb een probleem met de bluetoothmodule bij mijn Arduino UNO. Ik heb deze een aantal dagen geleden ontvangen: http://www.ebay.com/itm/A...ain_0&hash=item2321fa27b9 .

Ik heb vervolgens de Baud-rate ingesteld op 9600 en met mijn Mac en pc een verbinding gelegd met de module. Deze wordt vervolgens ook herkend door het programma en ik kan hem selecteren om mijn code up te loaden maar vervolgens krijg ik deze foutmelding:
avrdude: stk500_recv(): programmer is not responding .

Tijdens het uploaden merk ik wel dat de mac verbinding maakt maar daar houdt het ook bij op.

Ik heb van te voren eerst via usb kabel de code met de baud-rate geupload. Ook heb ik geprobeerd de reset knop in te drukken voordat ik ging uploaden, maar het mag allemaal niet baten. Heeft iemand een idee wat ik nou fout doe?

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Klok werkt perfect zonder de BAT pin aan te sluiten (de BAT pin zit ook aan de andere kant van het bordje, zoals je kunt zien..). Wat ook vaag is : de afstand tussen de ene rij pinnen en de andere rij pinnen is 0.975 inch, en niet 1.0 inch. Ook zijn ze op de andere as 0.05 inch ten opzichte van elkaar verschoven.

De pinnen volgen per rij dus wel de 0.1 inch rastermaat, maar doen dat niet onderling. (als je begrijpt wat ik bedoel..)

Als ik trouwens de spanning over de batterij meet, kom ik op 4,342V, dus weer een totaal andere waarde..

Ik denk dat ik het bordje gewoon vannacht eens onder spanning laat staan, en morgen de batterij nog een keertje opmeet, ben benieuwd!

[ Voor 21% gewijzigd door WVL_KsZeN op 17-02-2013 23:04 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • Promy
  • Registratie: Oktober 2002
  • Laatst online: 11-09 23:32
Heeft er iemand al de simulator for arduino (link) getest? Ik probeerde hem hier (omdat ik nog niet wil testen op m'n nano), maar ik krijg vooral errors terwijl de code wel compileert...

ik probeer de crc16 te berekenen, maar voorlopig slaag ik er niet in (denk ik)
ik gebruik de crc16.c en crc16.h van deze site

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unsigned char mess[] ={0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xC3, 0x47, 0x15};
unsigned short resultaat;
unsigned short crcBuffer =0; 
int led = 13;
#include "crc16.c"  als ik dit wis compileert hij zonder errors, met crc16.c en crc16.h in dezelfde map.
 
 
 
void setup() {
  // put your setup code here, to run once:
  resultaat = crcsum(mess, 10, crcBuffer);
  Serial.begin(9600);
  Serial.print(resultaat);
}
 
void loop() {
  // put your main code here, to run repeatedly: 
}


Heeft er iemand dit werkend?

Acties:
  • 0 Henk 'm!

  • Mattie112
  • Registratie: Januari 2007
  • Laatst online: 12-09 16:32
tweakG5 schreef op zondag 17 februari 2013 @ 22:49:
Ik heb een probleem met de bluetoothmodule bij mijn Arduino UNO. Ik heb deze een aantal dagen geleden ontvangen: http://www.ebay.com/itm/A...ain_0&hash=item2321fa27b9 .

Ik heb vervolgens de Baud-rate ingesteld op 9600 en met mijn Mac en pc een verbinding gelegd met de module. Deze wordt vervolgens ook herkend door het programma en ik kan hem selecteren om mijn code up te loaden maar vervolgens krijg ik deze foutmelding:
avrdude: stk500_recv(): programmer is not responding .

Tijdens het uploaden merk ik wel dat de mac verbinding maakt maar daar houdt het ook bij op.

Ik heb van te voren eerst via usb kabel de code met de baud-rate geupload. Ook heb ik geprobeerd de reset knop in te drukken voordat ik ging uploaden, maar het mag allemaal niet baten. Heeft iemand een idee wat ik nou fout doe?
Is het wel mogelijk de Arduino te programmeren via bluetooth? De module wordt aangestuurd door je programma op de Arduino en dat programma probeer je te veranderen....

(misschien kan het wel hoor het is mij alleen nooit gelukt :p)

3780wP (18x 210wP EC Solar) | 2x Marstek Venus E (5.12kWh)


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
WVL_KsZeN schreef op zondag 17 februari 2013 @ 22:56:
Klok werkt perfect zonder de BAT pin aan te sluiten (de BAT pin zit ook aan de andere kant van het bordje, zoals je kunt zien..). Wat ook vaag is : de afstand tussen de ene rij pinnen en de andere rij pinnen is 0.975 inch, en niet 1.0 inch. Ook zijn ze op de andere as 0.05 inch ten opzichte van elkaar verschoven.

De pinnen volgen per rij dus wel de 0.1 inch rastermaat, maar doen dat niet onderling. (als je begrijpt wat ik bedoel..)

Als ik trouwens de spanning over de batterij meet, kom ik op 4,342V, dus weer een totaal andere waarde..

Ik denk dat ik het bordje gewoon vannacht eens onder spanning laat staan, en morgen de batterij nog een keertje opmeet, ben benieuwd!
Is de bat pin niet gewoon waar je een batterij aan knoopt voor backup power? Hij wordt dan niet opgeladen, enkel als de andere wegvalt schakelt hij op batterij over? Vaak hebben ze gewoon vanaf beide power supplies een shottky diode (low voltage drop) naar de interne power supply van het bordje. Hij pakt dan automatisch degene met hoogste spanning.

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
Als het inderdaad zo werkt, klopt het dan dat ik een lagere spanning op tussen GND en BAT dan de spanning van de batterij zelf?

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 22:07
pfffrt... na een halve dag wachten is de spanning nu toch weer langzaam aan het dalen.. (nog steeds maar een paar 0.001V, dus nog niet helemaal zeker over). Ik meet het morgen nog een keer, maar het lijkt er inderdaad op dat de cel toch wordt opgeladen als enkel VCC en GND zijn aangesloten. Weten we dat ook weer.

[ Voor 12% gewijzigd door WVL_KsZeN op 18-02-2013 22:01 ]

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 18:38

almightyarjen

When does the hurting stop?

Daar issie dan: mijn autonome lego rover die bij een bijna lege accu automatisch terugkeert naar zijn laadstation en daar opgeladen wordt :D

http://youtu.be/pmL5ZZkmAoc

De rover wordt bestuurd door een Mega en het laadstation door een Duemilanove...

Patreon | Main Youtube | Work In Progress Youtube


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
almightyarjen schreef op dinsdag 19 februari 2013 @ 00:01:
Daar issie dan: mijn autonome lego rover die bij een bijna lege accu automatisch terugkeert naar zijn laadstation en daar opgeladen wordt :D

http://youtu.be/pmL5ZZkmAoc

De rover wordt bestuurd door een Mega en het laadstation door een Duemilanove...
Ik vind het altijd geweldig om na te denken wat de NASA 45 jaar geleden gezegd zou hebben als je met zo'n speeltje aan zou komen zetten. :) Tof ding!
Pagina: 1 ... 25 ... 96 Laatste