Keresés

Részletes keresés

Tomiali Creative Commons License 2017.01.27 0 0 2803

Sziasztok.

Egy kis segítséget kérnék.

Mérek egy hőmérsékletet, van egy beállított hőmérsékletem ha alá megy a mért meg húz egy relét x ideig, majd elengedi és vár hogy menjen feljebb a hőmérséklet.

Ha letelik a várakozás és nem ment feljebb a beállított fölé megint meg húz. Ez így megy addig míg el nem éri a beállítottat. Hogy lehetne azt megoldani, hogy ha nem érte el a beállítottat de emelkedik a hőmérséklet akkor ne húzza be a relét?

 

Köszönöm

halaloszto Creative Commons License 2017.01.26 0 0 2802

ez király!!

 

ezeket a motorokat nem szánták tartós üzemre ugye. 50-60fok nem árthat neki, szóval amíg a kezed állja, addig ok.


Vajk

Előzmény: Trike. (2801)
Trike. Creative Commons License 2017.01.26 0 1 2801

Mire jó a hideg? Nincs kedvem kimozdulni, ergó van időm otthon :)

 

Már minden szép és jó, csak baromira melegszenek a motorok.

 

10mA a nyugalmi áramfelvétele.

 

Előzmény: Trike. (2800)
Trike. Creative Commons License 2017.01.25 0 0 2800

Közben sikerült, de úgy kattog, mint a ...

 

Az eredeti felhasználási helyén szép csendben zümmögött. Tuti még valami nem stimmel a Settins-ben :(

Előzmény: Trike. (2799)
Trike. Creative Commons License 2017.01.24 0 1 2799

Épített már valaki CD-ROM CNC-t?

 

Nekem összeállt, de a GRBL Settings kifogott rajtam :(

 

Törölt nick Creative Commons License 2017.01.24 0 0 2798

Feltöltöttem a vezérlőre, de meg kellett hagyni:

 

void sd_iras()
{
SD.begin(A0); // elhagyva nem nyitja meg a datalog.csv-t
freeRam();

 

 

Előzmény: Törölt nick (2796)
szf10 Creative Commons License 2017.01.24 0 0 2797

Üdvözlök mindenkit itt a fórumon.

Elakadtam egy NODEMCU-val szerettem volna illeszteni hozzá egy hőelemet MAX6675-el.

De 


#include <avr/pgmspace.h>

 

hiányolja.

 

De ezt nem tudom pótolni, amit a GIThub-ról letöltök avval sem jutottam előrébb.

 Remélem tud valaki segíteni.

 

Köszönöm

Törölt nick Creative Commons License 2017.01.24 0 0 2796

Javítások után:

 

1.8.0

Sketch uses 26414 bytes (81%) of program storage space. Maximum is 32256 bytes.
Global variables use 1367 bytes (66%) of dynamic memory, leaving 681 bytes for local variables. Maximum is 2048 bytes.

 

1.6.4

Sketch uses 29 490 bytes (91%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 357 bytes (66%) of dynamic memory, leaving 691 bytes for local variables. Maximum is 2 048 bytes.

 

Tetszik az 1.8.0, vajon miért jeleníti meg az I2C lcd-n a karaktereket?

Library gond nem lehet, mindkettő ugyan azt használja.

Előzmény: titusz99 (2795)
titusz99 Creative Commons License 2017.01.24 0 0 2795

Javítások:
Timer.h:
   #define MAX_NUMBER_OF_EVENTS (10) helyett #define MAX_NUMBER_OF_EVENTS (5)


void sd_iras()
{
SD.begin(A0);

helyett csak:

void sd_iras()
{
freeRam();


Ezt másképpen (és persze a többit is): dataString += String(dayOfMonth, DEC);
dataString += dayOfMonth;


A Serial.println(freeRam());-eket törölheted.
Elég lesz az egy is.

A dataString.reserve(150); szükséges, de tényleg jól meg kell saccolnod a méretét.
E nélkül folyamatosan növeli a dataString bufferének méretét.

A soros sebességet emeld meg.
Esetleg irasd ki az dataString-et Serial-ra.



Ez csere:
if (!SD.begin(A0)) {

Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

if (SD.exists("datalog.csv")) {
Serial.println("datalog.csv exists.");
}
else {
Serial.println("datalog.csv doesn't exist.");
}

Erre:
if (!SD.begin(A0)) {

Serial.println(F("initialization failed!"));
return;
}
Serial.println(F("initialization done."));

if (SD.exists("datalog.csv")) {
Serial.println(F("datalog.csv exists."));
}
else {
Serial.println(F("datalog.csv doesn't exist."));
}



Setup-on belül:
SD.begin(A0);
if (!SD.begin(A0)) {

Felesleges az eslő SD.begin, csak egyszer kell meghívni.



Ezek után NANO-ra:
1.6.12v:
Sketch uses 26 012 bytes (84%) of program storage space. Maximum is 30 720 bytes.
Global variables use 1 365 bytes (66%) of dynamic memory, leaving 683 bytes for local variables. Maximum is 2 048 bytes.

1.7.11v:
Sketch uses 29 530 bytes (96%) of program storage space. Maximum is 30 720 bytes.
Global variables use 1 355 bytes (66%) of dynamic memory, leaving 693 bytes for local variables. Maximum is 2 048 bytes.

1.8.1v:
Sketch uses 26008 bytes (84%) of program storage space. Maximum is 30720 bytes.
Global variables use 1363 bytes (66%) of dynamic memory, leaving 685 bytes for local variables. Maximum is 2048 bytes.

Előzmény: Törölt nick (2792)
titusz99 Creative Commons License 2017.01.23 0 0 2794

Ami zavar, hogy a két verzió első freeram-ja lényegesen eltér egymástól.

Ha jól látom 180 byte.

 

Olyan mintha az F() makró figyelmen kívűl lenne hagyva.

 

Ha lesz időm holnap megnézem, hogy SD mit eszik.

 

 

Előzmény: Törölt nick (2792)
Törölt nick Creative Commons License 2017.01.23 0 0 2793

Conclusions:
Free Memory functions for Arduino are a little bit voodoo magic, don’t take the absolute value for granted!

Előzmény: Törölt nick (2792)
Törölt nick Creative Commons License 2017.01.23 0 0 2792

Minden azonos.

 

Az 1.6.4v tölti fel az üzemelő vezérlőre a  RAM vizsgálatát nem tartalmazó kódot, az I2C LCD csak azzal jeleníti meg helyesen a karaktereket.

 

[code]
//Sketch uses 26 502 bytes (86%) of program storage space. Maximum is 30 720 bytes.
//Global variables use 1 528 bytes (74%) of dynamic memory, leaving 520 bytes for local variables. Maximum is 2 048 bytes.

/*Arduino Uno, ATmega328
Multiple DS18B20 Temperature Sensors
DS18B20 Pinout (Left to Right, pins down, flat side toward you)
- fekete = Ground
- sárga = Signal (Pin 2): (with 3.3K to 4.7K resistor to +5 or 3.3 )
- zöld = +5 or +3.3
Displayed on 4x20 character LCD display
DS3231 RTC
MAX6675 + K' thermocouple
DS1624 Temperature Sensors
*/
#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS1624.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "MAX6675.h"
#include "Timer.h"
DS1624 temperature1(0x48);
DS1624 temperature2(0x4E);
DS1624 temperature3(0x4D);
DS1624 temperature4(0x4F);
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
/*-----( Declare Constants and Pin Numbers )-----*/
// Data wire is plugged into port 2 on the Arduino (can be changed)
#define ONE_WIRE_BUS 2 // NOTE: No ";" on #define
#define SZV1START 3 // relay1
#define SZV2START 4 // relay2
#define PUFFER 5 // relay3
#define LAKAS1 6 // relay4
#define BYPASS 7 // relay5
#define LAKAS2 8 // relay6
/*-----( Declare objects )-----*/
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass address of our oneWire instance to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Start the LCD display library
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
int LED1 = 13; // Status LED Pin
int CS = 10; // CS pin on MAX6675
int SO = 11; // SO pin of MAX6675
int SCLK = 9; // SCLK pin of MAX6675
int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F)
float fusthofok = 0.0; // Temperature output variable
float lakaskW = 0.0;
float kazankW = 0.0;
// Initialize the MAX6675 Library for our chip
MAX6675 temp(CS,SO,SCLK,units);


// Setup Serial output and LED Pin
// MAX6675 Library already sets pin modes for MAX6675 chip!
/*-----( Declare Variables )-----*/
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Read%20individual

// WP 1
DeviceAddress pufferfent = { 0x28, 0xAC, 0xFA, 0x26, 0x06, 0x00, 0x00, 0x8C }; // "T1"
DeviceAddress puffer1_3 = { 0x28, 0x61, 0xBB, 0x26, 0x06, 0x00, 0x00, 0x7D }; // "T2"
DeviceAddress puffer2_3 = { 0x28, 0x99, 0x10, 0x26, 0x06, 0x00, 0x00, 0xED }; // "T3"
DeviceAddress pufferlent = { 0x28, 0x15, 0x1F, 0x28, 0x06, 0x00, 0x00, 0x00 }; // "T4"
DeviceAddress kintihofok = { 0x28, 0x49, 0xFE, 0x26, 0x06, 0x00, 0x00, 0x51 }; // "T9"
float T1 = 0;
float T2 = 0;
float T3 = 0;
float T4 = 0;
float T9 = 0;
float kW1 = 0;
float kW = 0;
float szazalek = 0;
float T5 = 0;
float T6 = 0;
float T7 = 0;
float T8 = 0;
float lakaskW1 = 0;
float kazankW1 = 0;

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// 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.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void kiolvas_t()
{
//puffer hőfok DS18B20-ból
sensors.requestTemperatures(); // Send the command to get temperatures
T1 = sensors.getTempC(pufferfent);
T2 = sensors.getTempC(puffer1_3);
T3 = sensors.getTempC(puffer2_3);
T4 = sensors.getTempC(pufferlent);
T9 = sensors.getTempC(kintihofok);
kW1 = ((T1+T2+T2+T3+T3+T4)/6)-37 ;
kW = kW1*1.2771 ;
szazalek = kW/64*100;

//hőfok kiolvasása DS1624-ből
T5 = temperature1.getTemp();
T6 = temperature2.getTemp();
T7 = temperature3.getTemp();
T8 = temperature4.getTemp();
lakaskW1 = (T5-T6)*0.001161*12.5*60;
kazankW1 = (T7-T8)*0.001161*28*60;
//lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
//hőfok kiolvasása MAX6675-ből
fusthofok = temp.read_temp();
if (LAKASFUTES > 0)
{
lakaskW = lakaskW1;
}
else
{
lakaskW = 0;
}
if(T7 > 47)
{
kazankW = kazankW1;
}
else
{
kazankW = 0;
}
}
void serial_print()
{
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
Serial.println(LAKASFUTES);
Serial.println(fusthofok);
Serial.println(T1);
Serial.println(T2);
Serial.println(T3);
Serial.println(T4);
Serial.println(T5);
Serial.println(T6);
Serial.println(T7);
Serial.println(T8);
Serial.println(T9);
Serial.println(kW);
Serial.println(szazalek);
}
void sd_iras()
{
SD.begin(A0);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);

// Lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);

String dataString ="";
//dataString.reserve(150);
Serial.println(freeRam());
dataString += String(dayOfMonth, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(hour, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(minute, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(second, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(LAKASFUTES);
dataString += ';';
Serial.println(freeRam());
dataString += String(fusthofok);
dataString += ';';
Serial.println(freeRam());
dataString += String(T1);
dataString += ';';
Serial.println(freeRam());
dataString += String(T2);
dataString += ';';
Serial.println(freeRam());
dataString += String(T3);
dataString += ';';
Serial.println(freeRam());
dataString += String(T4);
dataString += ';';
Serial.println(freeRam());
dataString += String(T5);
dataString += ';';
Serial.println(freeRam());
dataString += String(T6);
dataString += ';';
Serial.println(freeRam());
dataString += String(T7);
dataString += ';';
Serial.println(freeRam());
dataString += String(T8);
dataString += ';';
Serial.println(freeRam());
dataString += String(T9);
dataString += ';';
Serial.println(freeRam());
dataString += String(kazankW);
dataString += ';';
dataString += String(lakaskW);
dataString += ';';
Serial.println(freeRam());
dataString += String(kW);
dataString += ';';
Serial.println(freeRam());
dataString += String(szazalek);
dataString += ';';
Serial.println(freeRam());
dataString.replace('.',',');
File dataFile = SD.open("datalog.csv", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
}
void lcd_idopont ()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("20");
lcd.setCursor(7,0);
lcd.print(year, DEC);
lcd.setCursor(9,0);
lcd.print('.');
lcd.setCursor(10,0);
lcd.print(month, DEC);
lcd.setCursor(12,0);
lcd.print('.');
lcd.setCursor(13,0);
lcd.print(dayOfMonth, DEC);
lcd.setCursor(15,0);
lcd.print('.');
lcd.setCursor(5,1);
lcd.print(hour, DEC);
lcd.setCursor(7,1);
lcd.print(':');
lcd.setCursor(8,1);
lcd.print(minute, DEC);
lcd.setCursor(10,1);
lcd.print(':');
lcd.setCursor(11,1);
lcd.print(second,DEC);
lcd.setCursor(1,3);
lcd.print(dayOfWeek);
lcd.setCursor(2,3);
lcd.print('.');
lcd.setCursor(5,3);
lcd.print(F("nap a heten"));
}
void lcd_puffer ()
{
lcd.clear();
lcd.home(); lcd.backlight();
lcd.setCursor(8,0);
lcd.print(F("PUFFER"));
lcd.setCursor(0,1);
lcd.print(F("T1="));
lcd.setCursor(4,1);
lcd.print(T1);
lcd.setCursor(11,1);
lcd.print(F("T2="));
lcd.setCursor(14,1);
lcd.print(T2);
lcd.setCursor(0,2);
lcd.print(F("T3="));
lcd.setCursor(4,2);
lcd.print(T3);
lcd.setCursor(11,2);
lcd.print(F("T4="));
lcd.setCursor(14,2);
lcd.print(T4);
lcd.setCursor(0,3);
lcd.print(F("kW="));
lcd.setCursor(4,3);
lcd.print(kW);
lcd.setCursor(11,3);
lcd.print(F("%="));
lcd.setCursor(14,3);
lcd.print(szazalek);
}
void lcd_teljesitmeny()
{
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print(F("LAKAS:"));
lcd.setCursor(11,0);
lcd.print(lakaskW);
lcd.setCursor(0,1);
lcd.print(F("T5="));
lcd.setCursor(4,1);
lcd.print(T5);
lcd.setCursor(11,1);
lcd.print(F("T6="));
lcd.setCursor(14,1);
lcd.print(T6);
lcd.setCursor(4,2);
lcd.print(F("KAZAN:"));
lcd.setCursor(11,2);
lcd.print(kazankW);
lcd.setCursor(0,3);
lcd.print(F("T7="));
lcd.setCursor(4,3);
lcd.print(T7);
lcd.setCursor(11,3);
lcd.print(("T8="));
lcd.setCursor(14,3);
lcd.print(T8);
}
void lcd_fusthofok()
{
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(8,0);
lcd.print(F("FUSTHOFOK"));
lcd.setCursor(0,1);
lcd.print(F("fusthofok="));
lcd.setCursor(11,1);
lcd.print(fusthofok);
lcd.setCursor(8,2);
lcd.print(F("KINTIHOFOK"));
lcd.setCursor(0,3);
lcd.print(F("kintihofok="));
lcd.setCursor(12,3);
lcd.print(T9);
}
void szabalyozas()
{
if(T7 > 55 && fusthofok > 130)
{

digitalWrite(LAKAS1,LOW );
digitalWrite(SZV1START,HIGH);
digitalWrite(PUFFER, HIGH);
}
else
{
if(T7 > 47)
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, HIGH);
}
else
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, LOW);
}
}
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
if ( LAKASFUTES > 4 && szazalek >1)
{
digitalWrite(BYPASS, HIGH);
digitalWrite(LAKAS2, LOW); // 6. RELÉ 8d
digitalWrite(SZV2START, HIGH); // 2. RELÉ 4d
}
else
{
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, LOW); // 5. RELÉ 7d
digitalWrite(SZV2START, LOW); // 2. RELÉ 4d
}
}
int freeRam () {
extern int __heap_start, *__brkval;
int v;
int fr = (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
Serial.print("Free ram: ");
Serial.println(fr);

}
Timer t;
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(115200);
// set the initial time here:
//DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,12,11,13,13,04,16);

//------- Initialize the Temperature measurement library--------------
sensors.begin();
// set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
sensors.setResolution(pufferfent, 10); //T1
sensors.setResolution(puffer1_3, 10); //T2
sensors.setResolution(puffer2_3, 10); //T3
sensors.setResolution(pufferlent, 10); //T4
sensors.setResolution(kintihofok, 10); //T9
temperature1.start();
temperature2.start();
temperature3.start();
temperature4.start();
pinMode(LED1, OUTPUT);
pinMode(SZV1START, OUTPUT);
pinMode(LAKAS1, OUTPUT);
pinMode(PUFFER, OUTPUT);
pinMode(SZV2START,OUTPUT);
pinMode(LAKAS2,OUTPUT);
pinMode(BYPASS,OUTPUT);
digitalWrite(SZV1START, HIGH); // szv1 áll
digitalWrite(LAKAS1, HIGH);
digitalWrite(PUFFER, HIGH); // pufferre állítja az irányváltó1-et
digitalWrite(SZV2START, HIGH); // szv2 áll
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, HIGH); // bypassra állítja irányváltó2-őt

kiolvas_t();

t.every(5*1000, kiolvas_t); //5 másodpercenként
t.every(5*1000, serial_print); //5 másodpercenként
t.every(15*1000, sd_iras); //15 másodpercenként
t.every(6*1000, szabalyozas); //6 másodpercenként
t.every(4*1000, lcd0); //sorban 4 másodpercenként a 4 kijelzési kép

pinMode(A0, OUTPUT);
SD.begin(A0);
if (!SD.begin(A0)) {

Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

if (SD.exists("datalog.csv")) {
Serial.println("datalog.csv exists.");
}
else {
Serial.println("datalog.csv doesn't exist.");
}
}
void loop()
{
t.update();
}
void lcd0()
{
static int c = 0;
if (c==0) lcd_idopont();
if (c==1) lcd_puffer();
if (c==2) lcd_teljesitmeny();
if (c==3) lcd_fusthofok();
c=(c+1) % 4;
}

[/code]

Előzmény: titusz99 (2791)
titusz99 Creative Commons License 2017.01.23 0 0 2791

Úgy látom lehet összehasonlítgatni a két verziót.

Változtattál valamit a core-n belül?

Sok az a kb. 140 byte különbség.

Előzmény: Törölt nick (2790)
Törölt nick Creative Commons License 2017.01.23 0 0 2790

IDE 1.6.4

Sketch uses 30 296 bytes (93%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 530 bytes (74%) of dynamic memory, leaving 518 bytes for local variables. Maximum is 2 048 bytes.

Free ram: 437

5
Free ram: 431
5
Free ram: 431
5
Free ram: 425
5
Free ram: 424
5
Free ram: 417
5
Free ram: 408
5
Free ram: 398
5
Free ram: 388
5
Free ram: 378
5
Free ram: 370
5
Free ram: 365
5
Free ram: 360
5
Free ram: 355
5
Free ram: 350
5
Free ram: 342
5
Free ram: 332
5
Free ram: 324
5
Free ram: 316

 

IDE 1.8.0

Sketch uses 27080 bytes (83%) of program storage space. Maximum is 32256 bytes.
Global variables use 1540 bytes (75%) of dynamic memory, leaving 508 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.

Free ram: 255
5
Free ram: 249
5
Free ram: 249
5
Free ram: 243
5
Free ram: 242
5
Free ram: 235
5
Free ram: 226
5
Free ram: 216
5
Free ram: 206
5
Free ram: 205
5
Free ram: 204
5
Free ram: 199
5
Free ram: 194
5
Free ram: 189
5
Free ram: 184
5
Free ram: 183
5
Free ram: 173
5
Free ram: 172
5
Free ram: 171
5

Előzmény: titusz99 (2789)
titusz99 Creative Commons License 2017.01.23 0 0 2789

Azt már jeleztem, hogy az SD-re írásod kritikus.

Azt a részt át kell írni, mert nagyon sok RAM-ot eszik.

A "reserve(200)" lehet, hogy sok, ki kell számolni, de jobban jársz ha beállítod.

Javaslom, hogy serialra írasd ki a freemem értékét minden egyes sor előtt.

Akkor kiderül, hogy mi a helyzet.

Az "= String(valami);" helyett "=valami;".

 

(Kevés RAM esetén a String-ek nem működnek. Ilyenkor üresek lesznek.)

Előzmény: Törölt nick (2787)
Törölt nick Creative Commons License 2017.01.23 0 0 2788

Sketch uses 26730 bytes (82%) of program storage space. Maximum is 32256 bytes.
Global variables use 1530 bytes (74%) of dynamic memory, leaving 518 bytes for local variables. Maximum is 2048 bytes.

 

Viszont különbözik a méret az verziótól függően is, a fenti IDE 1.8.0v, az előbbi  IDE 1.6.4v volt.

Viszont csak IDE 1.6.4v-val jeleníti meg helyesen a 4x20 soros I2C lcd a karaktereket.

Előzmény: Törölt nick (2787)
Törölt nick Creative Commons License 2017.01.23 0 0 2787

Sketch uses 29 816 bytes (92%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 520 bytes (74%) of dynamic memory, leaving 528 bytes for local variables. Maximum is 2 048 bytes.

Át kellett írni a kódot, az SD kártyára nem írt ki adatot:

 

void sd_iras()
{
SD.begin(A0);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);

// Lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);

String dataString =""; //String dataString; helyett
//dataString.reserve(200);
dataString += String(dayOfMonth, DEC);

Előzmény: titusz99 (2753)
titusz99 Creative Commons License 2017.01.23 0 0 2786

A hiba (reset probléma) a soros programozáskor fordulhat elő (16u2 irányából).

Programozó használatát nem érinti.

A 10 V-os ütés a reset lábon egy kicsit túlzás.

Azért van a védődióda a felhúzó-ellenállással párhuzamosan.

Talán egy zéner jobb lett volna.

Ezek szerint a szerzőnél lévő példány hibás volt, akkor elképzelhető, hogy az uno programozása hibára futott.

 

Előzmény: Vargham (2784)
323i Creative Commons License 2017.01.23 0 0 2785

Szerintem igen, nekem segitett.

Előzmény: nagyharcos (2781)
Vargham Creative Commons License 2017.01.23 0 0 2784

>Ez a kondenzátoros reset nekem vakításnak tűnik.

Ezt hogy érted?

https://rheingoldheavy.com/arduino-from-scratch-part-11-atmega328p-dtr-and-reset/

Előzmény: titusz99 (2783)
titusz99 Creative Commons License 2017.01.23 0 0 2783

Az 1.7.11-es Arduino IDE mega bootlodere szerint (stk500v2) kezeli a wdt-t.

Ezért azt javaslom, hogy próbáld azt feltölteni.

Ha a teszt ezek után is lefagy akkor vagy fordítasz vagy keresel hozzá való bootloader-t ami jó.

Ez a kondenzátoros reset nekem vakításnak tűnik.

A programozó egyik kimenetével pisztergálja a reset lábat.

Szóval kimenetet terhelsz egy kondival.

Előzmény: nagyharcos (2781)
titusz99 Creative Commons License 2017.01.23 0 0 2782

Ha lefagy, elszáll a wdt használata(tesztje) során akkor igen, olyan bootloader-re ami kezeli a wdt-t.

Előzmény: nagyharcos (2781)
nagyharcos Creative Commons License 2017.01.23 0 0 2781

Szia!

Kipróbáltam a kína megámaon a WDT-t. Nálam is kifagy!  Egyébként minden oké... Ezek szerint nekem is le kéne cserélnem a bootloadert?

Előzmény: 323i (2780)
323i Creative Commons License 2017.01.23 0 0 2780

Sikerult a bootloader frissites!

Tegnap linux alatt probaltam, ott vmiert nem ment; ma win alatt (ugyanugy kabelezve mint tegnap), elore megcsinalta.

Feltoltottem a wdt-t es szepen ujrainditgatja magat a mega.

 

Tehat az unorol a mega bootloader frissites megy; visszafele azt a hibat irja ki, amit a kondi hianya okoz. Ha sikerul ez is, megirom.

 

Addig is koszonom mindenkinek aki probalt segiteni!

Előzmény: titusz99 (2775)
323i Creative Commons License 2017.01.22 0 0 2779

Nalam mega/uno szinten ugyanugy fagy.

Ha megvagyok a bootloader update-tel, jelzem es bizom benne hogy mukodni fog a wdt.

Előzmény: Törölt nick (2778)
Törölt nick Creative Commons License 2017.01.22 0 0 2778

https://bigdanzblog.wordpress.com/2014/10/23/installing-the-optiboot-loader-on-an-arudino-nano-to-fix-the-watch-dog-timer-wdt-issue/

https://bigdanzblog.wordpress.com/2014/10/24/arduino-watchdog-timer-wdt-example-code/

https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader

Ezek alapján a nanon sikerült bekapcsolni a wdt funkciót, a nano uno-ként viselkedik.

Nem lettem előrébb, a lefagyás wdt-vel is teljes, az az elektronikai rész is lefagy, csak a tápfeszültség ki-be kapcsolás oldja meg az újra indítást.

Az igen erős mágneses zavar, pl. egy induktív kapcsolás üti ki a magyarázatok szerint, azt kerülni kell.

A kódban is lehetnek hibák, nálam a delay(); időzítés elmaradása határozott stabilitás javulást eredményezett.

Előzmény: 323i (2776)
323i Creative Commons License 2017.01.22 0 0 2777

Ez alapjan kotottem ossze a mega-t es az uno-t. 2:12-nel van az, amikor inditja a bootloader feltoltest, nekem akkor hibat ir ki, amire ezt talaltam itt: "2. When getting this error:  avrdude: stk500_getsync(): not in sync: resp=0x00
You did not put an 100nF capacitor between +5v and RESET pin on the Arduino Mega 2560". Szo szerint nem ez a hibauzenet amit kapok, de ugyaningy kezdodik. Szoval a jovo heten vmikor kiprobalom 100n-s kondit a +5 es a reset koze, ahogy irjak.

Előzmény: titusz99 (2775)
323i Creative Commons License 2017.01.22 0 0 2776

Ezek sajnos nem segitettek, marad a bootloader csere.

Előzmény: Prof (2772)
titusz99 Creative Commons License 2017.01.22 0 0 2775

Van egy usbasp-om ilyen esetekre.

A bootloader, ami az arduino ide része.

Annyi, hogy kicsit át kell írni a boards.txt-t.

Az interneten rengeteg anyag van ezzel kapcsolatban.

Arról is, hogy hogyan lehet egyik arduinoval a másik bootloaderét cserélni vagy egyszerűen csak programozni.

Előzmény: 323i (2774)
323i Creative Commons License 2017.01.22 0 0 2774

Masik Arduino-val frissitetted a bootloadert?

Honnan toltotted le hozza az optiboot-ot?

 

Ezt en sem ertem, azert (is) vettem nano/uno/megat, hogy valamelyiken csak jo lesz, de nem. A masik ok pedig az, hogy igy egyikkel tudjam a masikon frissiteni a bootloadert.

 

A bootloader-t verziojat ki lehet valahogyan olvasni, vagy pl. ezzel a wdt-s teszttel lehet tudni hogy nem a legutolso verzio?

Előzmény: titusz99 (2773)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!