Keresés

Részletes keresés

nagyharcos Creative Commons License 2017.07.15 0 0 2970

Szia!

Hasonló modult használok. Gondolom a példaprogramokkal küzdessz és nem kapsz vélhetően jó eredményt.

Én is küzdöttem, nálam ezzel a módszerrel jó:

 

void pH_meres()
{
  int buf[10];                                             // buffer feltöltése
  for (int i = 0; i < 10; i++) {                     // 10 mérés átlagolása
    buf[i] = 0;
    buf[i] = analogRead(pHSensorPin);
    delay(10);
  }
  for (int i = 0; i < 9; i++) {
    byte j = 0;
    for (int j = i + 1; j < 10; j++) {
      if (buf[i] > buf[j]) {
        int temp = buf[i];
        buf[i] = buf[j];
        buf[j] = temp;
      }
    }
  }
  unsigned long int pHkozep = 0;                  // min és max értékek elhagyása
  for (int i = 2; i < 8; i++)                              // 6 középső érték kiválasztása
    pHkozep += buf[i];
  float pHsensor_atlag = pHkozep / 6;
  pH_ertek = mapfloat(pHsensor_atlag, 765, 665, 4.01, 7.01);
  if (pH_ertek > pH_max)  {
    pH_max = pH_ertek;
  }
  if (pH_ertek < pH_min)  {
    pH_min = pH_ertek;
  }
  pH = pH_ertek;
 }

 

Ez a részlet az én kódomból való, de az eredetijét a netről loptam és én csak testreszabtam. Nálam megy. Fontos, hogy használat előtt kalibrálni kell (a boardon lévő két poti segítségével), én erre pH 4.01-es kalibrációs folyadékot használtam.

Előzmény: Tomiali (2969)
Tomiali Creative Commons License 2017.07.11 0 0 2969

Sziasztok. Nem ismeri valaki ezt a ph mérőt? 

Törölt nick Creative Commons License 2017.06.27 0 0 2968

Ez a legújabb verzió, de még nem próbáltam ki. Az lesz, hogy bemásolok a programba működő sketch-eket és úgy próbálom meg futtatni. 

Előzmény: BuNnY (2967)
BuNnY Creative Commons License 2017.06.27 0 0 2967

Emlékeim szerint egy csomó C utasítást nem ismert, ezért nem igazán volt alkalmas valódi használatra. De lehet azóta már fejlődött.

Előzmény: Törölt nick (2966)
Törölt nick Creative Commons License 2017.06.26 0 0 2966
barkócza Creative Commons License 2017.06.23 0 0 2965

Persze, igazad van, mindenhez idő kell.

Előzmény: ruzsa janos (2964)
ruzsa janos Creative Commons License 2017.06.22 0 0 2964

nagy ISP frekvenciánál (mondjuk 187kHz) is működött az átvitel. Csak éppen néha tévesztett. Ennek nem értem a magyarázatát, de az AVRDUDE a flashelés után visszaolvassa az adattartalmat, és olyankor mindig kiderül.

Semmit sem nagy kunszt írni, feltéve, hogy eleget foglalkozol vele, meg értesz hozzá :)

 

Előzmény: barkócza (2962)
Vargham Creative Commons License 2017.06.22 0 0 2963

Az összes Arduino varáns bootloader open source.

Az USB soros illesztő típusa teljesen mindegy a bootloadernek. A lényeg, hogy sorban kapja a bájtokat. Akár egy másik mikrokontroller is küldhetné, még PC sem kellene hozzá.

A fenti kettő elég ok a kínainak, hogy ne akarjon újat fejleszteni. 😃

Előzmény: ruzsa janos (2960)
barkócza Creative Commons License 2017.06.22 0 0 2962

A felprogramozáshoz nem kell fix frekvencia, csak a felprogramozandó proci órajel frekvenciája legyen nagyobb (2x? meg kéne nézni), mint amit a felprogramozó kiad. Az előfordulhat, hogy valami geb@sz miatt úgy álltak be a fuse bitek, hogy a belső 32kHz-es oszcillátorról ketyeg a mikrovezérlőd. Ehhez pedig tényleg kis órafrekvencia kell a felprogramozónál.

 

Bootloadert írni azért nem egy kunszt.

Előzmény: ruzsa janos (2961)
ruzsa janos Creative Commons License 2017.06.21 0 0 2961

megnéztem szkópon az ISP jeleit, teljesen tiszták. Lehet persze, hogy nem is a jelek éleivel van baj, hanem mondjuk az órajel stabilitásával. érdekes lenne ugyanazt a nanot vagy unot egy "rendes" programozóval megírni, hogy ott mi az ISP felső sebességhatára, ahol még megbízható. 

Előzmény: barkócza (2958)
ruzsa janos Creative Commons License 2017.06.21 0 0 2960

eredetileg csak annyit akartam, hogy a lock-biteken le tudjam zárni a chipet. aztán amikor megjöttt az USBTINY, (klón), akkor nem pont úgy működött, mint ahogyan (felületes információk alapján) gondoltam. Akkor már vérszemet kaptam, hogy mindenképpen megértsem, miért úgy viselkedik, ahogyan. A netes információk egy része nem pontos (vagy én értem néha félre), szóval van azért benne kihívás. Bootloaderből állítólag van azért néhány változat pl az adafruiton is - valamit reszelgettek rajta.

Az pedig egyáltalán nem evidens, hogy a kínai utángyártott bootloadere PONTOSAN azonos legyen az erdetivel, mert a kínai egy teljesen más USB chipet használ

, aminek lehetnének más paraméterei. Mikor próbálhgatom és az isttennek sem működik, akkor nyilván igyekszem kizárni minden lehetőséget. Végül az írás előtti teljes törlés volt a kulcs - vagyis azt kellett csak kiiktatni.

 

egyébként valóban nincs szükségem a bootloaderre , az arduinos panelra is csak azért, mert nincs időm, energiám nyákot gyártani, anyagilag is értelmetlen lenne. PIC-es panelt gyártottam, de én igazából outsider vagyok.  

Előzmény: Vargham (2959)
Vargham Creative Commons License 2017.06.21 0 0 2959

Semelyik Arduinon nem védett a bootloader. Nyugodtan felülírhatod. Amúgy miért akarsz ISP programozás mellé bootloadert? Lehet, hogy írtad, de nekem kimardt.

A kínai klónban is ugyanaz a bootloader van. Nyílt forrású, a forrás és a bináris is szabadon elérhető. Miért is vacakolnának mással?

barkócza Creative Commons License 2017.06.20 0 0 2958

Örülök, hogy sikerült. :) Az Arduinokat egyébként konkrétan nem ismerem, de már vagy húsz éve dolgozom Atmellel, kezdve az Atmega103-mal. Jó sokat szívtam közben, pl. a 103-asnál az AD konvertert - az akkori előzetes adatlap alapján -  free running módban használtam. Nem ment könnyen, de valahogy megoldottam: később jött egy errata, hogy a korai adatlapokon szereplő dolgokkal szemben a 103-ason az AD konverternek nincs free running módja. (Workaround: read up-to-date data sheets.) Leizzadtam, mert akkorra már az egyik kuncsaftomnál működtek a műszereim a gépsor mellett...

 

Ugyancsak a 103-asnál először azt írták, hogy 6V-ig mehet a tápfesz. Valamiért nekem az 5.8V kényelmes volt. Csak azt vettem észre, hogy az EEPROM programozással vannak bajok. Később jött az errata, hogy 5.5V-is működik a chip.

 

A legnagyobb szívás az az assembler fordítóval történt. Egy darabig minden jól működött, aztán egy frissítés után nagyon furcsa hibák jöttek elő. Vagy egy hónapot szarakodtam vele, de aztán rájöttem (hogyan? már nem tudom), hogy a fordító nagyon ritkán a relatív ugrásokat rosszul fordítja le, mégpedig olyankor, amikor a relatív ugrás a legnagyobb abszolút értékű negatív érték volt (-0x40) - de akkor is csak ritkán.

Szerencsére megvolt a régi verzió, ami hibátlanul fordított, egy-két utasítás hiányzott belőle az újabb kontrollerekhez. Később ezt javították, de úgy, hogy a jelenlegi fordítók már a -0x40-es relatív ugrásra is "relative branch out of range"-et jelentenek.

 

Szóval, én már mindig mindenre előre gyanakszom. Ennek ellenére szeretem az Atmel kontrollereket, eszem ágában nem lenne másra átváltani.

Előzmény: ruzsa janos (2957)
ruzsa janos Creative Commons License 2017.06.20 0 0 2957

Nem hiszem, hogy rossz lenne  a chip-ed, nagyon valószínűtlen.

Ezzel a mondatoddal nagyon sokat segítettél, emiatt kezdtem tovább kísérletezni.

Kiderültek a következők: 

- az ISP program,amit találtam, a BITBURNER, az AVRDUDE-on alapul. észrevettem, hogy amint beírok a prpgrammemóriába, automatikusan törli a bootloader részt is. egész éjjel ezzel vacakoltam, semmi értelme nem volt, hiába lockoltam a bott területet, azonnal felülírta FF-el . Reggel pedig rájöttem: az AVRDUDE alapból MINDEN flashelés előtt törli a teljes chipet - vagyis alapra állítja a lock-biteket. Még ki is írta, hogymelyik paraméterrel lehet ezt kiiktatni (-D).

- most már az rendben volt, hogy nem törli egyik rész a másikat (a program a bootloadert.)

- a programozandó chipet betápoltam külön ( a programozón ki kell venni egy jumpert) - ez nem volt elég

- elkezdtem lassítani az ISP órajelét. lehet, hogy végül túlzásba estem, de  végül 32kHz-es ISP frekit állítottam be.

- és akkor visszaolvastam a működő (kínai) NANO panelről a bootloader (hátha a kínai bootloadere nem pontosan azonos az eredetivel), majd (köszönhetően neked) értelmezni tudtam a hex fájlt, átírtam úgy, hogy visszaírható legyen - (egyetlen sort kellett beszúrnom egy másik bootloaderből).

- felprogramoztam a bootloadert a halott UNO-ra-

- felprogramoztam a ki tesztprogramot. mindkettő hiba nélkül (és tetű lassan) ment.

 

Most működik az UNO, lehet újra USB-ről programozni.

Köszönöma a segítségedet.

 

Tanulság: ahhoz képest, hogy mennyien használják, az egész arduino/ISP NAGYON rosszul van dokumentálva. Vagyis, aki már ismeri, az megérti a leírásokat, de sehol nincs egy olyan, ami rendszerbe foglalva tárgyalná. 

Előzmény: barkócza (2952)
Törölt nick Creative Commons License 2017.06.20 0 0 2956

Tulajdonképpen erre az RS485 önálló - gép nélkül is futó - kommunikációra is megtaláltam a választ egy orosz fórumon:

 

http://arduino.ru/forum/programmirovanie/arduino-mega-2560-i-rs485

Előzmény: Törölt nick (2942)
Törölt nick Creative Commons License 2017.06.19 0 0 2955

A segítőészségről annyit - bár itt nem kérdeztem -, hogy az egyik magyar AVR fórumon akartam a MEGA 2560 "nem megy" kérdést feltenni, de szerencsére már valaki megelőzött. A lényeg, hogy a nagy guru válaszadó, csak annyit válaszolt, hogy kínait vettél? Így jártál. Nem mondta volna ki a varázsszót, hogy kínaihoz kínai drivert! Így aztán egy amerikai fórumon akadtam rá a válaszra és a linkre. Azóta nagyon jól muzsikál a MEGA. egy több, mint 2500 soros programot vertem bele, ami 32db digitális I/O-t vezérel gond nélkül.

Ezzel is úgy vagyok, mint bármilyen más elektronikai hobbimmal, ha magam nem, mástól legfeljebb minimális segítséget várhatok. Arra viszont jó, hogy amit magamtól kiszenvedek, azt biztos nem felejtem el. Ja, persze nem vagyok üzletileg érdekelt, hogy csak olyanoknak adjak tanácsot, aki csak egy bizonyos gyártó által forgalmazott termék felhasználóit részesíti előnyben. Tudom, valamiből meg kell élni!

Előzmény: Törölt nick (2943)
ruzsa janos Creative Commons License 2017.06.19 0 0 2954

mikor rájöttem arra, hogy fordítva volt bekötve (egyébként úgy is világítottak a led-ek (?!), nyilván széthúzta, meg az is lehet, hogy működés közben vettem el a táptot (éjjel 3-kor néha ne vagyok túl koherens. Hát azért az oda tud rúgni egy chipnek. Azt pl tudom, hogy a PIC melegítésre elveszíti az adattartalmás - de akár részlegesen is. volt ilyenem.

Előzmény: barkócza (2952)
ruzsa janos Creative Commons License 2017.06.19 0 0 2953

az arduinonál pl írja, hogy ha valaki az egyik arduinoval akarjaa  másikat programozni ISP-n, akkor be kell szerelni egy 10 uF-os szűrőkondit a tápra.

csak azt nem értem, miért mindig ugyanott jelentkezik a hiba a memóriában....

az infót meg köszönöm

Előzmény: barkócza (2952)
barkócza Creative Commons License 2017.06.19 0 0 2952

Nem hiszem, hogy rossz lenne  a chip-ed, nagyon valószínűtlen. Arra gondolok, hogy az ilyen kínai utángyártmányok kispórolnak egy csomó dolgot, pl. a tápfesz szűrőkondenzátorait, vagy nem olyan kerül bele, amilyen kéne. Vagy a tápegységed nem megfelelő esetleg, ellenőrizd le. A másik persze az, amit már írtam, hogy az ISP-d által kiadott jeleken az élek nem elég élesek. Nem tudom, milyen kábelt adnak hozzá, de próbálj meg minél rövidebb kábelt használni.

 

Az Atmel Studio három fájlformátumot tud kezelni, Intel, Motorola, és Generic. Alapból Intel-re fordít, ennek a leírását itt megtalálod a Wikin. A többi is meglesz, ha rákeresel. Ezek igazából nem bináris, hanem szövegfájlok.

Előzmény: ruzsa janos (2951)
ruzsa janos Creative Commons License 2017.06.19 0 0 2951

az UNO R3 panelom van, 328P vezérlővel, felületszerelt kivitel. Rendeltem most 2 darabot hogy kicseréljem, remélhetőleg ezt még nem hamisítják...

azóta megpróbáltam beleírni egy hosszabb programot az ISP-vel. belement, de szerencsére ez a programozó GUI úgy van megcsinálva, hogy vissza is ellenőrzi, és itt már hibát jelztett. Vagyis a bootloader területen van hibás szektor (mindig ugyanott), meg itt is van. Ebből arra gondolok, hogy a chip mindenképpen meghalt, viszont ha kicserélem, akkor még ISP programozással tudom használni a panelt - legfeljebb ha más része is sérült, akkor nincs többé USB programozás.

Van esetleg egy emészthető leírásod arról, hogyan épül fel a programozónak adott hex fájl, illetve a visszaolvasott fájlok? 

Az arduino klón nincs védve, ezért egy működő példányből vissza tudnám szerezni a bootloadert, de az már látom, hogy a beírt és a visszaolvasott hex nem teljesen azonos szerkezetű.

Előzmény: Gesztenye100 (2949)
barkócza Creative Commons License 2017.06.19 0 0 2950

Bocs, ez igazából én voltam, csak nem figyeltem.

Előzmény: Gesztenye100 (2949)
Gesztenye100 Creative Commons License 2017.06.19 0 0 2949

Az Atmel valóban word-ben címzi a programmemóriát. Melyik vezérlő van az áramkörödben?

 

A felprogramozásnál általában érzékeny arra, hogy szépek és gyorsak legyenek a felfutó élek, egyébként előfordulnak ilyen-olyan hibák. Ebben van különbség az egyes ISP áramkörök közt. Meg, persze, érdemes minél rövidebb madzagot használni.

 

Az xmega előtt saját felprogramozót használtam, hol printerporton keresztül (+AHC244 jelformálásnak), hol egy FT232R USB kontrollert. A felprogramozó áramkört kábel nélkül cstlakoztattam a nyákhoz, nem volt vele soha probléma.

 

Hex editornak a Norton commander egyik utánérzését szoktam használni, én szeretem. Sőt, régebben még a programot (assemblerben) is ezen írtam, és parancssoros fordítót használtam. 

Előzmény: ruzsa janos (2948)
ruzsa janos Creative Commons License 2017.06.18 0 0 2948

Nos, az UNO csak részben élte túl a műveleteket (de uyge a tudomány érdekében nincs az az ár, ami túl magas lenne...), mert megsérülta bootloadere,illetve úgy néz ki, inkább a memória, valahol a 7A80 címnél - vagyis éppen a bootloader tartományban. Töröltem az egészet. Amikor visszatöltöm rá a bootloadert (adafruitról, arduinoról, mindenhonnan) akkor 5-ből négyszer memóriahibát jelez kb ugyanazon a címen. Aztán ötödjére működik az ellenőrzés, de a programozásnál már beakad, nem tud programot betölteni. Ha az ISP-n töltök fel programot, az működik -de valószínűleg nem éri el azt a hibás címtartományt.

Segítenétk nekem valamiben?

Az ISP programozónak ugye megmondom, honnan kezdődik a boot-rész, de az 3800 - 3F00 tartomány, vagyis kb a memória felétől. Ehhez képest a bootloader a programban a 7800 címtől kezdődik. Egy helyen azt találtam, azért, mert az ATMEL itt wordben számol , vagyis 2 byteban, és akkor a cím valóban a fele, mint byteban. Ez így lenne? Illetve, azt jól gondolom, hogy manuális bootloader töltéskor előbb

- törlöm a teljes tartalmat - ezzel nyitom a lockbiteket, megengedi az írás

- betöltöm a bootloadert

- zárom a lockbitet a bootloader területen

- betöltöm a programot (bootloaderrel USB-n vagy a programozóval az ISP-n)

- zárom (ha akarom) a lockbiteket a programrészen. és akkor utána már csak törléssel tudom olvasni/továbbírni a chipet.

 

Van olyan hex editor, amivel egyszerűen lehet az ATMEL chip hex fájljait szerkeszteni? Egy egyszerű editor nem tud mit kezdeni a sorok elejére írott címekkel. 

ruzsa janos Creative Commons License 2017.06.18 0 0 2947

azannya, és azért a 480 forintért legalább jelölve van a kábelen az 1-es láb :) (mert az enyémen nincs)

Előzmény: halaloszto (2945)
ruzsa janos Creative Commons License 2017.06.18 0 0 2946

még annyit, hogy az Arduino UNO és a NANO (klón) panelon biztosan működik az ISP kiolvasás. (Csak mondjuk nem kell azt hinni, hogy ugyanúgy állnak a csatlakozók a 6-pólusú aljtzatban. Mert fordítva. De még ettől sem halt meg :) )  

Előzmény: ruzsa janos (2944)
halaloszto Creative Commons License 2017.06.18 0 0 2945

nem, a legalja az ez: http://www.ebay.com/itm/USBASP-USBISP-AVR-Programmer-Adapter-10-Pin-Cable-USB-ATMEGA8-ATMEGA128-Arduino-/310506909410?hash=item484ba76ee2:g:llAAAOSwuMZZKUz7

 

és működik! annyira primitív, hogy nem tudja a protokollt amit minden atmel programozó, olyan progi kell, ami direkt ezt ismeri. amúgy nagyon szép történet, egy német manusz (http://www.fischl.de/usbasp/) tervezte és írta a fw-t, a kínaiak meg elkezdtek ötforintért hw-t gyártani hozzá.


Vajk

Előzmény: ruzsa janos (2944)
ruzsa janos Creative Commons License 2017.06.18 0 0 2944

ATMEL PROGRAMOZÓ
Hátha valakit még érint a kezdők közül, mint magam is vagyok:

Rendeltem egy egyszerű AVR chip programozót: USBTiny USBtinyISP AVR ISP Programmer 6/10 Pin Bootloader for Arduino UNO MEGA ami valószínűleg mindennek a legalja a maga 928 forintos árával. Ez az Adafruit USBtinyISP nevű készülékének a klónja.

Driver: https://learn.adafruit.com/usbtinyisp/drivers

Telepítés után az AVRDUDE programmal működ(-ne), ami egy kimondottan programozóknak készült dos-os alkalmazás. http://savannah.nongnu.org/projects/avrdude 

windows 7 professional rendszeren viszont nagyon jól működik az AVRDUDE alapján a  Bitburner grafikus felület.

 

Törölt nick Creative Commons License 2017.06.16 0 0 2943

Ma jött meg a Made in China Mega. Gond volt vele, mert nem csatlakozott az USB portra. Körülnéztem a fórumokon és kiderült, hogy a kínai alaplaphoz le kell tölteni installálni a drivert. Utána COM7 porton bejelentkezett. Ha valaki szintén kínai MEGA 2560-at vesz, akkor a drivert innen töltheti le:

 

http://www.wch.cn/download/CH341SER_ZIP.html

Törölt nick Creative Commons License 2017.06.11 0 0 2942

Megy! 

 

Tx:

 

#include <SoftwareSerial.h>
#include "RS485.h"

SoftwareSerial RS485Serial(0, 1); //RX, TX

int byteReceived;
int byteSend;

void setup()
{
Serial.begin(9600);
Serial.println("SoftwareSerial remote loop example");

pinMode(Pin13LED, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
RS485Serial.begin(28800);
}

void loop()
{
digitalWrite(13, HIGH);
if (Serial.available())
{
byteReceived = Serial.read();

digitalWrite(4, HIGH);
RS485Serial.write(byteReceived);

digitalWrite(13, LOW);
delay(1000);
digitalWrite(4, LOW);
}

if (RS485Serial.available())
{
digitalWrite(13, HIGH);
byteReceived = RS485Serial.read();
Serial.write(byteReceived);
delay(1000);
digitalWrite(13, LOW);
}
}

 

 

 

Rx:

 

#include <SoftwareSerial.h>
#include "RS485.h"

SoftwareSerial RS485Serial(0, 1);

int byteReceived;
int byteSend;

void setup()
{
Serial.begin(9600);
Serial.println("Serial data");

pinMode(13, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
RS485Serial.begin(28800);
}

void loop()
{
if (RS485Serial.available())
{
byteSend = RS485Serial.read();
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);

digitalWrite(4, HIGH);
RS485Serial.write(byteSend);
delay(1000);
digitalWrite(4, LOW);
}
}

 

Igaz, nem tudom, hogy mi, mert szkóppal még nem néztem rá. De, ha lekapcsolom a tápról az Rx-et, akkor megszűnik a kommunikáció, amit a Tx LED állapota mutat, nem villog. 

Törölt nick Creative Commons License 2017.06.09 0 0 2941

Végülis Profnak címeztem a kérdést, de tőled is elfogadom a választ. Mindegy kitől tanul az ember, ha okosabb :-) 

Előzmény: Törölt nick (2940)

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