Fórum témák
- HW-578 relé modul tervezési hibája?
- • Tápegység
- • Vakondriasztó
- • Be-/kikapcsoló nyomógombbal
- • Erősítő építése elejétől a végéig
- • Hűtőgép probléma
- • Oszcilloszkóp vétel, mit gondoltok?
- • Bojler javítása, kérdések
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Transzformátor készítés, méretezés
- • Napelem alkalmazása a lakás energia ellátásában
- • XBOX kiegészítők, javítások átalakítások
- • Elfogadnám, ha ingyen elvihető
- • Felajánlás, azaz ingyen elvihető
- • Kazettás magnó (deck) javítása
- • Villanyszerelés
- • Kávéfőzőgép hiba
- • Leválasztó transzformátor
- • Audiofil, High End Audio
- • Kombinált gáztűzhely
- • Li-Po - Li-ion akkumulátor és töltője
- • Kompresszor hiba
- • Keverőpult építése, javítása
- • SONY TA-F 590ES MOSFET végfok átalakítása
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Elektroncső
- • Autós indító és indításrásegítő
- • Hawksford Error Correction
- • LCD monitor probléma
- • Multiméter - miért, milyet?
- • Szárítógép problémák
- • Plazma TV
- • Arduino
- • Elektronyika orosz digitális órák
- • Kapcsolóüzemű tápegység
- • Codefon kaputelefon
- • Quad 405-ös erősítő tapasztalatok és hibák
- • Számítógép hiba, de mi a probléma?
- • Inverteres hegesztőtrafó
- • Érdekességek
- • Adatlapot keresek
- • Opel Astra elektromos hibák
- • Kapunyitás gombnyomásra olcsón! - avagy automata kapu házilag
- • Erősítő mindig és mindig
- • Áram mérése
- • Hegesztő inverter javítás
- • LCD TV probléma
- • Crystal radio - detektoros rádió
- • Autós erősítős kérdések, problémák
- • Milyen mikroszkópot vásároljak?
- • Emos dori led lámpa villogó hiba
- • Motorgyújtás
- • Rendelés külföldről (eBay - Paypal)
- • Indukciós főzőlap javítása
- • Akkumulátor töltő
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Természetesen tisztában vagyok ezzel. Van itthon 4db DUE-m. Shield-eket nem használok, csak prototípusnak használom az arduino platformot, a rendes áramköreimet általában nulláról építem fel (és arduino mentesen).
Felesleges addig bármit is rendelned amíg azt se tudod kiszámolni , hogy az adott áramköri környezetbe mekkora értékű ellenállást kell beépíteni.
Ezek általános iskolai fizika ismeretek.(OHM törvény)
Mivel kezdenél el foglalkozni?Mi célból?Mit akarsz uC-el "mozgatni"?
Ha már mindenképpen ellenállásokat rendelnél akkor inkább E12 / E6 ellenállás sorokat tartalmazó "sortiment/assortment" keressél. A hozzászólás módosítva: Jún 25, 2015
Sziasztok!
Arduinoval szeretnék összehozni egy 16bites ADC-t SPI interfészen keresztül. Ez az adatlap alapján meg is írtam egy programot, de nem működik, első üzenetben kalibrálnám az eszközt, de már az sem működik, az ic-n lévő p0, p1, p2 lábakat kellene bekapcsolnia, de eddig sem jut el, mit rontottam el? Köszi!
/*
SSTRB goes low when the ADC begins a conversion and goes
high when the conversion is finished
SSTRB goes low at the beginning of calibration and goes
high to signal the end of calibration
Control byte format
7 - (MSB) START The first logic “1” bit, after CS goes low, defines the beginning of the Control Byte
6 - UNI/BIP 1 = unipolar, 0 = bipolar
5 - INT/EXT Selects the internal or external conversion clock. 1 = Internal, 0 = External.
4 - M1 M1 M0 MODE
3 - M0 0 0 24 External clocks per conversion (short acquisition mode)
0 1 Start Calibration. Starts internal calibration.
1 0 Software power-down mode
1 1 32 External clocks per conversion (long acquisition mode)
2 - programmable bit P2
1 - programmable bit P1
0 - programmable bit P0
*/
#define CALIBRATION 0b11100111
#define START 0b11011000
#include <SPI.h>
int sstrb = 8;
int adcPin = 9;
int sdPin = 10;
unsigned int adcValue = 0;
byte LowByte,HighByte;
void setup() {
pinMode(sstrb,INPUT);
pinMode(adcPin, OUTPUT);
pinMode(sdPin, OUTPUT);
digitalWrite(adcPin,HIGH);
digitalWrite(sdPin,HIGH);
digitalWrite(10,LOW);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE0);
delay(100);
digitalWrite(adcPin,LOW);
SPI.transfer(CALIBRATION); //kalibrálás
while(!digitalRead(sstrb)){}
SPI.transfer(START); //mérés indítás
}
void loop(){
while(!digitalRead(sstrb)){}
adcValue=SPI.transfer(START);
Serial.print("ADC: ");
Serial.println(adcValue);
}
Nagyszerűen működik, viszont ha szeretném kijelezni a hőmérsékletet, akkor be kell tennem egy delay-t, ami lassabb működést eredményez.
Nincs ötleted arra, hogy a kettő egyszerre menjen és ne befolyásolja a késleltetés?
Köszi.
Nem igazán értem, hogy miért kell a delay, nem tudsz programot mutatni, hogy értsem is?
Erről lenne szó.
#include <EEPROM.h>
#include <LiquidCrystal.h>
int tempPin = A1;
int led = 13;
int pwm = 6;
float temp;
float settemp;
//float kitemp;
int swtu = 2;
int swtd = 3;
const int numReadings = 20;
int readings[numReadings];
int index = 0;
int total = 0;
int average = 0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
pinMode (led,1);
pinMode (pwm, OUTPUT);
/* lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("hello, world!");
delay(1000);
lcd.clear();
EEPROM.read (2); */
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
delay (1000);
}
void loop() {
total= total - readings[index];
readings[index] = analogRead(tempPin);
total= total + readings[index];
index = index + 1;
if (index >= numReadings)
index = 0;
average = total / numReadings;
int tvalue = average;
float temp = (tvalue / 1024.0) * 500;
lcd.begin(16, 2);
lcd.setCursor (0,0);
lcd.print("aktualis:");
lcd.print (temp);
lcd.setCursor (13,0);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor (0,1);
lcd.print ("kivant:");
lcd.print (kitemp);
lcd.setCursor (11,1);
lcd.print((char)223);
lcd.print ("C");
settemp = EEPROM.read(2);
// kitemp = settemp;
analogWrite(pwm,map(temp-kitemp,0,30,0, 255));
delay (200);
if
(digitalRead(swtu)== 1 )
{
(settemp ++);
EEPROM.write (2,settemp);
// lcd.clear();
}
else{
}
if
(digitalRead (swtd) == 1)
{
(settemp --);
EEPROM.write (2,settemp);
//lcd.clear();
}
else {
}
/*if ((temp - 0.3 < kitemp) && (kitemp > temp + 0.3))
{
digitalWrite (led,1);
// lcd.begin (16,2);
lcd.setCursor(15,1);
lcd.print("I");
delay (100);
}
else
{
digitalWrite (led,0);
lcd.setCursor(15,1);
lcd.print("O");
delay(100);
}
//delay (200); */
}
Melyiket szeretnéd kiiratni? az aktuálisat, vagy a kívántat? hova tetted az a delayt? ha jól emlékszem, azt mondtad, hogy ez fűtés, ugye? ha az, akkor a map-nál a temp-kitemp-et fordítva kell, mert így minusz érték lesz. a kívánt hőfok nincs is ledeklarálva, csak kommentkénet van ott.
A kívántat és az aktuálisat is, egy-egy sorban. A kitemp helyett természetesen settemp van, csak az maradt bent. Fűtés lenne, igen. Delay a 74. sorban van.
Sziasztok!
Szeretnék arduinoval vezérelni egy PT2258 és PT2323 IC-t.
Említett eszközök I2C-n kommunikálnak.
A 60 napos leckében ezen a fejezeten túl vagyok, de nem látom át, egészen, hogy hogyan fogjak hozzá egy I2C eszköz illesztéséhez, vagy az adott funkciók elvégzésére hogyna vegyem rá.
Az egyik eszköz egy 6 csatornás választó és 6 csatornás hangerőszabályzó.
képen látható hogy kapcsolódnak egymáshoz, de mindkettő külön vezérelhető.
Szeretném a hangerőt rotary encoder-rel változtatni, és nyomógombbal a csatorna választást vezérelni.
Jelenleg Mega-m van, de ezen feladat ellátására vagy minit, vagy nano-t akarok használni majd.
Mellékelem a két IC adatlapját is.
Ha nincsenek jobb adatlapok?
Akkor felejtős az egész!
Ezekből a bekötésen kívül semmit nem tudtunk meg!
A regiszterek címei és a szükséges vezérlés beállítási definíciók, nagyon kellenek az értelmes programozáshoz!
A 2258-nak ott van a pdf-ben. A 2323-hoz nem találtam jobbat eddig, bár azt valahogy használják analóg kapcsolással is, mert az egyiknél mechanikus kapcsolóval volt választható a csatorna. Szőt, az analóg totál analóg volt, mert a hangerőt is egy 6 sávos poti szabályozta. Hogy mi ráció van ebben, nem tudom, de így volt.
Ugyanis van 2 bontott és 1 jelenleg üzemben levő áramköröm. ebből az egyik bontott és az üzemben lévő mc-vel vezérelt Meg is van az mc-jük, de szerintem esély nincs rá, hogy ki lehessen olvasni, mert tuti lezárta a gyártó!
Egyenlőre segítsetek abban amiben tudtok, én meg kutászkodok, hátha találok valami leírást a 2323 címzéséről.
A PT2323 utasításkészletét itt tudod megnézni. A PT2258 szerintem elég részletes.
A Wire könyvtár segítségével küldhetsz adatot. Google-val találsz mintaprogramokat, magam is úgy kezdtem.
Közben megtaláltam én is a 2323 utasításkészletét.
Van a progiban egy két dolog, amit nem értek, hogy minek, mert sokkal egyszerűbben is meg lehet oldani, kicsit kikozmetikáztam neked, de nem akartam összedugni, úgyhogy nem próbáltam ki. Az új:
#include <EEPROM.h>
#include <LiquidCrystal.h>
int tempPin = A1;
int led = 13;
int pwm = 6;
int settemp;
int last_settemp;
int swtu = 2;
int swtd = 3;
int numReadings = 20;
int total = 0;
int average = 0;
int state=0;
int lastState=0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
pinMode (led,1);
pinMode (pwm, OUTPUT);
lcd.begin(16, 2);
settemp=EEPROM.read(2);
last_settemp=settemp;
}
void loop() {
total=0;
for (int i=0;i<numReadings;i++){
total=total+analogRead(tempPin);
delay(1);
}
average=total/numReadings;
int tvalue = average;
float temp = (tvalue / 1024.0) * 500;
lcd.begin(16, 2);
lcd.setCursor (0,0);
lcd.print("aktualis:");
lcd.print(temp);
lcd.setCursor (13,0);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor (0,1);
lcd.print ("kivant:");
lcd.print (settemp);
lcd.setCursor(11,1);
lcd.print((char)223);
lcd.print ("C");
analogWrite(pwm,map(temp-settemp,0,30,0,255));
if(digitalRead(swtu)== 1){
state=1;
}else if(digitalRead (swtd) ==1){
state=2;
}else{
if(settemp!=last_settemp){
EEPROM.write (2,settemp);
last_settemp=settemp;
}
}
if(lastState!=state){
if(state==1){
settemp ++;
}else if(state==2){
settemp--;
}
lastState=state;
}
/*if((temp - 0.3 < kitemp) && (kitemp > temp + 0.3)){
digitalWrite (led,1);
lcd.setCursor(15,1);
lcd.print("I");
delay (100);
}else{
digitalWrite (led,0);
lcd.setCursor(15,1);
lcd.print("O");
delay(100);
}*/
}
Sziasztok! Tudom, nem igazán ide való, de mivel webszerver, ezért jobb ötletem nincs, mint ide írni Ez egy kis javascript: ajaxos webszervernél az érkező adatokat szeretném egy változóba pakolni, tömbként, de sehogyan sem akar működni az érkező adatok itt vannak:
for (count = 0; count < num_an; count++) {
document.getElementsByClassName("switches")[count].innerHTML =this.responseXML.getElementsByTagName("switch")[count].childNodes[0].nodeValue;
}
tehát amit most a switches-be rak, az kéne nekem egy tömb-ös változóba, tud valaki segíteni nekem, nagyon megköszönném. A hozzászólás módosítva: Jún 26, 2015
Köszi.
Kipróbáltam, de a kívántat nem lehet megmozdítani...
Jó, már látom a hibám, az int state=0;-t tedd át a loop elejére. Az eeprom-ot meg azért tettem át úgy, mert annak nem egészséges, ha minden nyomásnál írja, mert rövidül az élete, a gombokat pedíg azért, mert prellegni fognak.
Köszi, isten vagy, nem tudom ezt hogyan nem találtam meg.
Nem tudom aktuális-e még a kérdésed. A weblap egy része valóban elhelyezhető webtárhelyen , hiszen elég csak az ajaxos javascriptet tölteni az arduino szerverről. Ennek egyetlen hátránya, hogy akkor mindenképpen kell hozzá internet, helyi/belső hálóban nem biztos, hogy működni fog. Mivel az oldalban a hivatkozások (pl. a .js betöltése) nem csak relatív, hanem teljes útvonalnévvel megadott linkkel is megoldható így egyetlen weboldal is töltődhet több különböző címről.
A php auth nem tudom hogy működik, ahhoz nekem is utána kellene olvasnom. De azt el tudom mondani, ha érdekel, hogy az arduinoban hogy oldottam meg a jelszavas belépést.
A gyorsításra talán megoldás lesz a DUE gyorsabb ARM processzora. Egyelőre nem tudom eldönteni, hogy az SPI korlátozza-e a sebességet, vagy az ATMEGA processzor.
Most pl. egy másik SD kártya van belerakva, és ezzel sokkal lassúbb a szerver, sejtésem szerint azért mert 8Gb-os kártya, van rajta 7,5Gb AVI fájl, és a maradék helyre másoltam fel a webszerver fájljait. Gondolom az arduino FAT32 kezelő algoritmusa kicsit többet dolgozik ilyenkor. A hozzászólás módosítva: Jún 26, 2015
Így gondoltad? Sajnos így is ugyanaz
#include <EEPROM.h>
#include <LiquidCrystal.h>
int tempPin = A1;
int led = 13;
int pwm = 6;
int settemp;
int last_settemp;
int swtu = 3;
int swtd = 2;
int numReadings = 20;
int total = 0;
int average = 0;
int lastState=0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
pinMode (led,1);
pinMode (pwm, OUTPUT);
lcd.begin(16, 2);
settemp=EEPROM.read(2);
last_settemp=settemp;
}
void loop() {
int state=0;
total=0;
for (int i=0;i<numReadings;i++){
total=total+analogRead(tempPin);
delay(1);
}
average=total/numReadings;
int tvalue = average;
float temp = (tvalue / 1024.0) * 500;
lcd.begin(16, 2);
lcd.setCursor (0,0);
lcd.print("aktualis:");
lcd.print(temp);
lcd.setCursor (13,0);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor (0,1);
lcd.print ("kivant:");
lcd.print (settemp);
lcd.setCursor(11,1);
lcd.print((char)223);
lcd.print ("C");
analogWrite(pwm,map(temp-settemp,0,30,0,255));
if(digitalRead(swtu)== 1){
state=1;
}else if(digitalRead (swtd) ==1){
state=2;
}else{
if(settemp!=last_settemp){
EEPROM.write (2,settemp);
last_settemp=settemp;
}
}
if(lastState!=state){
if(state==1){
settemp ++;
}else if(state==2){
settemp--;
}
lastState=state;
}
/*if((temp - 0.3 < kitemp) && (kitemp > temp + 0.3)){
digitalWrite (led,1);
lcd.setCursor(15,1);
lcd.print("I");
delay (100);
}else{
digitalWrite (led,0);
lcd.setCursor(15,1);
lcd.print("O");
delay(100);
}*/
}
GND-ot vagy 5V-ot teszel rá? mert most kipróbáltam, és nekem tökéletes.
Köszi a segítséget, a webtárhelyről lemondtam, mert túl bonyola lenne a script, arra lennék igazándiból kíváncsi, hogy neked hogyan van a hitelesítés?
5V-t, de ha megcserélem, akkor is ugyanaz...
Nem is értem, most próbáltam, és nekem ment... próbáld meg, hogy beteszel egy serial.begint, és ahol a settemp-- ill. ++ van, ott a settemp értékét kiiratod, nem-e csak az lcd-n nem megy...
Kiírattam portra és ott is ugyanaz történik...
Hát ezt végképp nem értem, 5v-t adsz a 2-es vagy 3-as pinre, és semmi?
A felfelé gombra ugrik egyet, majd ha elengedem, akkor visszavált.
Most kipróbáltam még egyszer, tökéletes, tettél rá ellenállást, hogy ne prellegjen? Vagy itt van, belső felhúzó ellenállással:
#include <EEPROM.h>
#include <LiquidCrystal.h>
int tempPin = A1;
int led = 13;
int pwm = 6;
int settemp;
int last_settemp;
int swtu = 3;
int swtd = 2;
int numReadings = 20;
int total = 0;
int average = 0;
int lastState=0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
pinMode (led,OUTPUT);
pinMode (pwm, OUTPUT);
pinMode (swtu, INPUT);
pinMode (swtd, INPUT);
digitalWrite(swtu,LOW);
digitalWrite(swtd,LOW);
lcd.begin(16, 2);
settemp=EEPROM.read(2);
last_settemp=settemp;
}
void loop() {
int state=0;
total=0;
for (int i=0;i<numReadings;i++){
total=total+analogRead(tempPin);
delay(1);
}
average=total/numReadings;
int tvalue = average;
float temp = (tvalue / 1024.0) * 500;
lcd.begin(16, 2);
lcd.setCursor (0,0);
lcd.print("aktualis:");
lcd.print(temp);
lcd.setCursor (13,0);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor (0,1);
lcd.print ("kivant:");
lcd.print (settemp);
lcd.setCursor(11,1);
lcd.print((char)223);
lcd.print ("C");
analogWrite(pwm,map(temp-settemp,0,30,0,255));
if(digitalRead(swtu)== HIGH){
state=1;
}else if(digitalRead (swtd) ==HIGH){
state=2;
}else{
if(settemp!=last_settemp){
EEPROM.write (2,settemp);
last_settemp=settemp;
}
}
if(lastState!=state){
if(state==1){
settemp ++;
}else if(state==2){
settemp--;
}
lastState=state;
}
/*if((temp - 0.3 < kitemp) && (kitemp > temp + 0.3)){
digitalWrite (led,1);
lcd.setCursor(15,1);
lcd.print("I");
delay (100);
}else{
digitalWrite (led,0);
lcd.setCursor(15,1);
lcd.print("O");
delay(100);
}*/
}
Vagy ha ez sem, akkor próbáld meg, hogy gnd-ot teszel rá:
#include <EEPROM.h>
#include <LiquidCrystal.h>
int tempPin = A1;
int led = 13;
int pwm = 6;
int settemp;
int last_settemp;
int swtu = 3;
int swtd = 2;
int numReadings = 20;
int total = 0;
int average = 0;
int lastState=0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
pinMode (led,OUTPUT);
pinMode (pwm, OUTPUT);
pinMode (swtu, INPUT_PULLUP);
pinMode (swtd, INPUT_PULLUP);
lcd.begin(16, 2);
settemp=EEPROM.read(2);
last_settemp=settemp;
}
void loop() {
int state=0;
total=0;
for (int i=0;i<numReadings;i++){
total=total+analogRead(tempPin);
delay(1);
}
average=total/numReadings;
int tvalue = average;
float temp = (tvalue / 1024.0) * 500;
lcd.begin(16, 2);
lcd.setCursor (0,0);
lcd.print("aktualis:");
lcd.print(temp);
lcd.setCursor (13,0);
lcd.print((char)223);
lcd.print ("C");
lcd.setCursor (0,1);
lcd.print ("kivant:");
lcd.print (settemp);
lcd.setCursor(11,1);
lcd.print((char)223);
lcd.print ("C");
analogWrite(pwm,map(temp-settemp,0,30,0,255));
if(digitalRead(swtu)== LOW){
state=1;
}else if(digitalRead (swtd) ==LOW){
state=2;
}else{
if(settemp!=last_settemp){
EEPROM.write (2,settemp);
last_settemp=settemp;
}
}
if(lastState!=state){
if(state==1){
settemp ++;
}else if(state==2){
settemp--;
}
lastState=state;
}
/*if((temp - 0.3 < kitemp) && (kitemp > temp + 0.3)){
digitalWrite (led,1);
lcd.setCursor(15,1);
lcd.print("I");
delay (100);
}else{
digitalWrite (led,0);
lcd.setCursor(15,1);
lcd.print("O");
delay(100);
}*/
}
|
|