Bedrijfs urenteller voor CNC machine

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Bedrijfs urenteller voor CNC machine

Berichtdoor Creator » 17 Mrt 2016, 17:54

Ik wil graag voor mijn CNC machine een urenteller maken.

Als mechanische bouwer ben ik wel wat gewend maar op het elektronica gebied begin ik pas, veel ervaring en de benodigde kennis is er (nog) niet vandaar mijn misschien domme vraag.
Maar zoals mijn vader ooit zei, zonder te vragen blijf je dom. :shock:
Nu heb ik het e.e.a. over klokken en tijden op het forum gevonden, echter ik heb (nog) niets kunnen vinden buiten de RTC artikelen welke gaan over wekkers enz. Het gaat mij niet om datum, jaar of 24 uur klok maar om een doortellende eenheid van uren en minuten.

Wat wil ik dat dit module gaat doen;
- Actief worden wanneer er spanning op komt machine Aan;
- Optellen van de tijd (uren en minuten) tot een maximum van 9999:59 ;
- Opslaan van de tijd;
- Onthouden tijd bij uitzetten van de machine;
- Eventueel een alarm welke iedere 10 uur een signaal geeft (audio en/of Led) met reset/stop knop;

De voeding zal waarschijnlijk via een trafo gebeuren in de range van 6 - 12V DC 500mA (nog niet definitief).

Wat is de meest aantrekkelijke manier om dit uit te voeren?
Ik zelf dacht dit te doen met een RTC DS3231 met AT24C32 of is een ATiny85 genoeg hiervoor (ik heb nl geen real time nodig)
Als display denk ik aan 2x 1 single en 1x 4 7-segmenten display met dubbele punt.
En de voeding middels een LM317T op 5 of 3.3 V te brengen.

Is mijn idee haalbaar of zit ik er grandioos naast?

Wie kan wil mij adviseren/helpen

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor nicoverduin » 17 Mrt 2016, 18:24

De crux zit hem in de eeprom. De Arduino geeft standaard 100.000 cycles hoewel dat getal al eens verdubbeld schijnt te zijn met testen. jouw chip heeft ff meer (1.000.000 cycles).
De vorige waarden ophalen is geen probleem bij opstarten. Wat de machine niet weet is wanneer de spanning gaat wegvallen. Daar is wel een truuk voor met bijv. behulp van een relais die de waarden wegschrijft op het moment dat de spanning wegvalt.
Een andere vraag die bij mij opkomt is, hoe betrouwbaar moet het zijn? Anders zou je weg kunnen komen met de millis() functie oid en heb je de RTC ook niet nodig.
Wat wel belangrijk is, is dat je bepaald hoe je de 7Seg wil aansturen (direct, I2C, SPI). Dat bepaalt in feite de hoeveelheid IO pinnen die je nodig hebt.
Ik zou eerst uitzoeken wat je nodig hebt of gaat gebruiken. Een Arduino kost tegenwoordig ook nog maar 2.50 euro dus kun je gerust volstaan met een wat ruimere chip. An als je het wat steviger wilt hebben, sloop je die connectoren eraf en zet je er een rijtje screw-terminals erop.
Let wel dat voor I2C en SPI er altijd weer net iets andere software libs vaak nodig zijn bij gebruik van de tinies.
Haalbaar? absoluut.
We horen/lezen graag de uitkomst van je huiswerk.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor shooter » 17 Mrt 2016, 21:10

Elke processor die I2C heeft kan dit al aan.
de voorgestelde RTC is ook prima, daar zitten zelfs 7 bytes user geheugen in.
dus elke minuut verhoog je dat en schrijf je naar de RTC.
dan heb je een prima urenteller.
de 7 seg display is ook simpel, want die hoeft alleen maar het getal uit de RTC te showen.
als je daarvoor ook een I2C ding voorpakt met 8 segment display dan heb je ook nog drukknoppen en een rijtje leds ter beschikking en dat allemaal met slechts 2 pinnen.
5 Volt erop en een RTC en een 7segment library en klaar.
paul deelen
shooter@home.nl

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor Creator » 18 Mrt 2016, 14:30

Allereerst bedankt voor de reactie ;)

Ik begrijp dat het allemaal is te realiseren.

Ik heb een Arduino Uno liggen om de software naar de ic te schrijven en een print maken is ook geen probleem.
Wat wel een uitdaging is om de juiste componenten uit te kiezen voor dit projectje.
Als ik de reacties lees en samenvat dan;

- Is de genoemde RTC een goede keus (tijd is nauwkeurig en een ruime geheugen bank) ;
- Het wegschrijven van de data bij wegvallen spanning kan een probleem geven.
Is dit wellicht software matig op te lossen door bijv. constant de data weg te schrijven, zeg maar eens per minuut, mocht de spanning dan wegvallen dan is er maar een minuut verloren en dat is van geen belang.
Of anders een hardware matige stop toets (tijd stopt met tellen en huidige waarde wordt weggeschreven).

- 7seg displays aansluiten is lastig ivm de vele pinnen;
Ik kan deze 7seg displays vervangen door een (16x1 of 16x2) LCD scherm heb ik nog liggen, is dit misschien een simpeler oplossing?)
Of zoals shooter voorstelt een I2C met 8segment display, alleen waar kan je die in NL kopen
Ik neem aan dat dit wordt bedoeld:

http://embedded-lab.com/blog/introducin ... g-max7219/

Wat heb ik op de plank liggen:
Arduino Uno v3
RTC DS3231
LCD 16x2 display
7seg display (2x 4 digits en 2x 1 digit)
ATiny45 en ATiny85

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor shooter » 18 Mrt 2016, 21:38

voeding sluit je aan op de cnc bank en dan wel op de motor (geeft wel storing maar daar is die voeding goed voor.)
ofwel als er voeding op de arduino staat moet je elke minuut of zo een 1 optellen op een geheugen plaats, en ja dan raak je telkens 0.5 minuut kwijt, dus als je dan het aantal keren schakelen ook onthoud dan doe je een hele goede gooi naar de tijd.
je combinatie is prima en ik zou inderdaad 16x2 gebruiken. want het aansluiten van losse displays is erg lastig.

ik heb die 8 cijfers wel liggen hoor, en kijk eens boven aan de bladzijde, die heeft er zoveel dat hij ze verkoopt.
paul deelen
shooter@home.nl

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor Creator » 19 Mrt 2016, 17:40

Ok,
Ik ga verder met de RTC en LCD display.
Eerst een werkend prototype maken dan later wel verfraaien als dat nodig is.
Ohhhh domme ik, totaal over de 8 digit 7seg gelezen bij de adverteerder hierboven :oops:
Maar ik kan later altijd nog de LCD inwisselen voor 7seg display, eerst maar een werkend model.

Bedankt voor de respons, ik ga nu kijken hoe ver ik kom ;)
tot het volgende obstakel....

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor Creator » 26 Mrt 2016, 17:59

Inmiddels zijn we weer wat verder gevorderd.
ik heb de RTC en LCD via de Arduino met elkaar verbonden en kan de tijd uitlezen op het scherm.

Waar ik nu niet uit kom is hoe kan ik de RTC beïnvloeden zodat deze de uren door telt na 24 en niet met 00 opnieuw begint?

Wat ik ook probeer ik kom er niet achter waar ik de code kan vinden om deze waarde aan te passen zodat het maximum aantal uren 9999 wordt (zal dan ook de byte moeten veranderen in integer).

hier bijgevoegd het stukje code wat ik tot nu gebruik.

cpp code
#include "Wire.h"                         
#define DS3231_I2C_ADDRESS 0x68 // het I2C adress van de RTC DS3231 module

#include <LiquidCrystal.h> //dit is de bibliotheek voor de LCD schermen.
LiquidCrystal lcd( 12, 11, 5, 4, 3, 2 );

byte decToBcd(byte val) // Zet normale Decimale cijfers om in Binaire code.
{
return( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val) // Zet Binaire code om in normale Decimale cijfers.
{
return( (val/16*10) + (val%16) );
}

void setup()
{
Wire.begin();
lcd.begin(16,2);
// DS3231 seconds, minutes, hours
// setDS3231time(50,59,23); //na eenmalige upload plaats remark markers terug
}

void setDS3231time(byte second, byte minute, byte hour)

{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.endTransmission();
}

void readDS3231time(byte *second,
byte *minute,
byte *hour) // zet uren later op integer omdat deze moet doortellen tot 9999 en een byte kan maar tot 255.

{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 3); // request 3 bytes of data from DS3231 starting from register 00h

*second = bcdToDec(Wire.read() & 0x7f); // 0x7f = 127
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f); //0x3f = 63
}

void displayTime()

{
byte second, minute, hour;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour);
// send it to the lcd shield
lcd.clear();
lcd.print("Huidig");
lcd.setCursor(8,0);
lcd.print(hour, DEC);
lcd.print(":");
if (minute<10)
{
lcd.print("0");
}
lcd.print(minute, DEC);
lcd.print(":");
if (second<10)
{
lcd.print("0");
}
lcd.print(second, DEC);

}

void loop()

{
displayTime(); // display the real-time clock data on the LCD display,
delay(1000); // every second
}

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor shooter » 27 Mrt 2016, 19:16

Code: Alles selecteren
/*----------------------------------------------------------------------*
 * Write multiple bytes to RTC RAM.                                     *
 * Valid address range is 0x00 - 0xFF, no checking.                     *
 * Number of bytes (nBytes) must be between 1 and 31 (Wire library      *
 * limitation).                                                         *
 * Returns the I2C status (zero if successful).                         *
 *----------------------------------------------------------------------*/
byte DS3232RTC::writeRTC(byte addr, byte *values, byte nBytes)
{
    i2cBeginTransmission(RTC_ADDR);
    i2cWrite(addr);
    for (byte i=0; i<nBytes; i++) i2cWrite(values[i]);
    return i2cEndTransmission();
}

/*----------------------------------------------------------------------*
 * Write a single byte to RTC RAM.                                      *
 * Valid address range is 0x00 - 0xFF, no checking.                     *
 * Returns the I2C status (zero if successful).                         *
 *----------------------------------------------------------------------*/
byte DS3232RTC::writeRTC(byte addr, byte value)
{
    return ( writeRTC(addr, &value, 1) );
}

/*----------------------------------------------------------------------*
 * Read multiple bytes from RTC RAM.                                    *
 * Valid address range is 0x00 - 0xFF, no checking.                     *
 * Number of bytes (nBytes) must be between 1 and 32 (Wire library      *
 * limitation).                                                         *
 * Returns the I2C status (zero if successful).                         *
 *----------------------------------------------------------------------*/
byte DS3232RTC::readRTC(byte addr, byte *values, byte nBytes)
{
    i2cBeginTransmission(RTC_ADDR);
    i2cWrite(addr);
    if ( byte e = i2cEndTransmission() ) return e;
    i2cRequestFrom( (uint8_t)RTC_ADDR, nBytes );
    for (byte i=0; i<nBytes; i++) values[i] = i2cRead();
    return 0;
}

/*----------------------------------------------------------------------*
 * Read a single byte from RTC RAM.                                     *
 * Valid address range is 0x00 - 0xFF, no checking.                     *
 *----------------------------------------------------------------------*/
byte DS3232RTC::readRTC(byte addr)
{
    byte b;
   
    readRTC(addr, &b, 1);
    return b;
}

je mag in de 3231 maar tot 12 gaan.


een stukje uit een lib
https://github.com/JChristensen/DS3232RTC

als je dan elke minuut of zo een byte met 1 verhoogd dus lees de byte dan byte++ en weer schrijven
als byte ==255 dan byte+1 =byte+1=++
als byte+1==255 dan byte+2++
als byte+2 == 255 dan byte+3++
dan heb je al een flink tijd.
255*255*255*255 is een hele hoop als je dan een begintijd op de standaardtijd zet.sommige beginnen in 1970 andere beetje later.
paul deelen
shooter@home.nl

Berichten: 77
Geregistreerd: 17 Mrt 2016, 17:05
Woonplaats: Julianadorp

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor Creator » 28 Mrt 2016, 19:59

Bedankt voor de suggestie, alleen ik krijg de foutmelding
"'DS3232RTC' has not been declared" en ik krijg het niet voor elkaar om dit werkend te krijgen.
helaas komt mijn kennis hier schromelijk tekort :?

in welke richting moet ik denken?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Bedrijfs urenteller voor CNC machine

Berichtdoor nicoverduin » 28 Mrt 2016, 20:24

Creator schreef:Bedankt voor de suggestie, alleen ik krijg de foutmelding
"'DS3232RTC' has not been declared" en ik krijg het niet voor elkaar om dit werkend te krijgen.
helaas komt mijn kennis hier schromelijk tekort :?

in welke richting moet ik denken?
Als je refereert naar dat stukje code van shooter, dan klopt dat je deze boodschap krijgt. Dit is een stukje uit de library van de RTC. Hier refereert hij naar de opmerking onderaan de code. Misschien een beetje cryptisch, maar je kan die code zo dus niet compileren en dat is ook niet de bedoeling.
Maar toch nog eens een paar opmerkingen over jouw hele programma.
Ik heb in het begin gevraagd hoe nauwkeurig alles moet zijn. M.a.w. is het op de milliseconden nodig om de nauwkeurigheid te handhaven. Als ik dan naar de code kijk is dat niet echt van toepassing. En tenzij je persé de echte tijd wilt tonen of alleen de urenteller, had ik die hele RTC eruit gegooid. en dan gewoon:
cpp code
laatste stand HMS uit eeprom
timer op 1000 milliseconden
na verloop van timer verhoog je de HMS met 1 seconde en corrigeer je voor minuten en uren en evt. zelfs dagen
Sla alles op in de eeprom.
klaar

Want volgens mij wordt er nu een hele focus gezet op een klok chip terwijl het alleen maar een teller hoeft te zijn van dagen:uren:minuten:seconden
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten