Fórum témák
- • Audiofil, High End Audio
- • Multiméter - miért, milyet?
- • Frekvenciaváltó
- • TV hiba, mi a megoldás?
- • Felajánlás, azaz ingyen elvihető
- • Robotfűnyíró vagy fűnyíró robot
- • Kombikazán működési hiba
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Bluetooth kérdések
- • Kis teljesítményű 3 fázisú betáppal 1 fázisú nagy teljesítmény kivétele
- • Suzuki Swift elektronika
- • Elektromos tolókapu
- • TDA7294 végerősítő
- • Rendelés külföldről (eBay - Paypal)
- • Kaputelefon
- • Számítógép hiba, de mi a probléma?
- • Villanyszerelés
- • Forrasztási 1×1 forrasztástechnikai miértek
- • Vásárlás, hol kapható?
- • Napelem alkalmazása a lakás energia ellátásában
- • DC motor/lámpa PWM szabályzása
- • Androidos okos telefonok
- • Mosógép vezérlők és általános problémáik
- • Mosogatógép hiba
- • Skoda Octavia elektromos probléma
- • Vezeték nélküli csengő más célra
- • Kazettás magnó (deck) javítása
- • Elfogadnám, ha ingyen elvihető
- • Érdekességek
- • Kamerás megfigyelőrendszer
- • Espressif mikrokontrollerek
- • RF műszerek, mérések
- • Műterhelés építése
- • Kondenzátor
- • Akkumulátor töltő
- • Rádió tuner hiba
- • Bascom-AVR
- • CNC építése házi alkatrészekből az alapoktól
- • PIC - Miértek, hogyanok haladóknak
- • Aszinkron motorok tekercselése
- • Videoton EA 6383 s (tuning)
- • Műhelyünk felszerelése, szerszámai
- • Videoton RT7300S
- • Altium Designer
- • Muzeális készülékek-alkatrészek restaurálása
- • Kapcsolási rajzot keresek
- • Klíma szervizelés, javítás
- • Hegesztő inverter javítás
- • V-FET és SIT erősítő kapcsolások
- • GSM adatátvitel
- • Műveleti erősítő
- • Energomat mosógép
- • Alternativ HE találkozó(k)
- • EL84 kimenő trafó
- • Magnetométer építése
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Sziasztok!
Vettem egy uno-t de hiába töltök rá akár milyen tft-s programot csak egy fehér képernyő jön be mi lehet a baj?
Valoszinu szintillesztes, ha jo a labkiopsztas.
Már jó lett rossz könyvtárat használtam de az érintőképernyőt nem tudom életre kelteni arra esetleg van ötleted?
elvileg valami „...Touch” konyvtar kellene, de az attol is fugg hogy milyen LCD, mi a meghajtoja
Eddig semeddig sem jutottam.
Igazából most lenne konkrét projekt, és így barátkoznék az arduinóval. Eddig kb 1 éve a polcon "porosodott".
Most egy UNO-val játszok, de úton van 2db Nano, amelyikből az egyik lesz az "áldozat".
Hogyan tudom a belső eepromban tárolni nagyon szájba rágósan? És hogyan tudom majd az összegét tárolni? Kikapcsolás előtt semmi nem figyelmezteti, csak kikapcsolnám az egészet.
SPFD5408 vezérlő van benne na most működik a tapi pad de össze vissza már mint teljesen elvan csúszva érzékelésileg a képhez mintha 180 fokot kellene fordítani az érzékelésén. Ezt mi okozhatja?
Üdv!
Az alany egy nano board. Bénázásom során rákerült az egyik digitális pin-re a 12V fesz.
Volt némi füst. Látszólag működik az eszköz, LCD-t meghajt, stb. Ez a kimenet természetesen nem ad életjelet. Kérdésem, hogy mennyire befolyásolja a többi részét az ATmegának ez a malőr? Továbbra is használhatom a többi funkcióját?
Ha nem tudod, mikor lesz kikapcsolva, akkor elmented mondjuk 10percenként, és legrosszabb esetben is csak 10 percet vesztettél (vagy fél percenként, de akkor számold ki, mennyi ideig lesz biztos a működés, ugyanis az EEPROM nem végtelenszer írható). Vagy kikapcsolás helyett az egyik bemenetet húzod le GND-re, vagy amit akarsz, aztán az Arduino elengedi a saját reléjét, így áramtalanítja magát.
Az eeprom használatát ne várd el, hogy leírja bárki is, ott a neten millió példa. A hozzászólás módosítva: Okt 19, 2015
Hogyan lehetne megoldani, hogy egy nyomógombbal egy kimenetet bármikor ki vagy be tudjak kapcsolni? Azaz nyomásra átbillenjen a másik állapotra? Bekapcsolás már megy.
Ez egy mintapélda arra, hogyan lehet használni a DigitalToggle utasítást:
A nyomógombot kezelő részt egészítsd ki vele.
#include <DigitalToggle.h>
int ledPin = 13; // A 13-as lábat használjuk (a beépített LED-et)
void setup() {
pinMode(ledPin, OUTPUT); // Kimenet lesz a 13-as láb
}
void loop(){
delay(500); // Fél másodperc szünet
digitalToggle(ledPin); // Ellentétesre vált: 0 -> 1, vagy 1 -> 0
}
Valaki esetleg az érintőképernyő problémára?
Szia
Nem olvastam végig, de az elején felsorolja minden problémád, gondolom a megoldás is ott van.
Bővebben: Link
Sziasztok. Segítségre lenne szükségem. Van egy Ilyenem. /*
Soldering Iron Controller
To change controler mode press UP and DOWN at the same time !!!
24.4.2014. Milos.
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int analogPin = 0; // potentiometer wiper (middle terminal) connected to analog pin A0 // outside leads to ground and +5V
const int btnMode = 6; // the number of the pushbutton pin
const int btnUp = 1; // the number of the pushbutton pin
const int btnDown = 2; // the number of the pushbutton pin
const int pwmHeater = 10; // the number of the PWM pin
const float fAmplification = 183 ; // measured by series of experiment, for ex.: input 21.2mV, output 3.9V
// const float fKTypeSensitivity = 0.000041; // V/degC this is in theory for K type
// But based on experiment on known melting point for the Multicore Alloy C99 (Liquidus on 240 degC), generate voltage is 15mV, so it correspond to TMelting-TAmb = 240-25 = 215 degC
// so sensitivity is calculated as 0.015/215 = 6.9767e-5
//const float fKTypeSensitivity = 0.000075; //old
const float fKTypeSensitivity = 6.9767e-5;
const float fADResolution = 1024.0; // for 10 bit AD converter
const float fADMax = 5.0; // AD convertor max range
//--PID
const float fKp = 10.0; //proportional gian (Value tested with HQ Soldering Iron = 10 )
const float fKi = 1.0; //integral gian (Value tested with HQ Soldering Iron = 1)
const float fKd = 10.0; //derivative gian (Value tested with HQ Soldering Iron = 10)
//--Graphic
const int iHowManyCyclesToRefreshDisplay = 4; //Printing on Display after specified number of sampling cycles
const int iSerialSend = 1; //0-don't send, 1-send to serial
//calculation
float fTemp = 0.0; // Temperature [C]
float fTAmb = 25.0; // Ambient temperature [C]
float fTSet = 0.0; // Set point [C]
float fVoltage; // Voltage from Ain0
float fLSB = 0.0 ; // one LowSiginificantBit [V], (5/1024=0.0048828125)
float fScaleFactor = 0.0; // [degC/LSB] (0.0048828125/340/0.000041=0.35)
float fTime = 0.0; // Time
//---------
float fTimeSampling;
float fTimeLast;
int iCycleCounter=0; //Counter of cycles for printing on display
int iPID_or_OnOff = 0; //0=PWM, 1=OnOff !!!!! HERE THE INITIAL CONTROLER IS SET !!!!
//--PID
float fEk = 0.0; //current error
float fEk_1 = 0.0; //last error
float fPWM; //output PWM
float fIntegralTerm =0.0;
void setup() {
fLSB = fADMax / fADResolution; // one LowSiginificantBit [V], (5/1024=0.0048828125)
fScaleFactor = ( 1.0 / fAmplification ) / fKTypeSensitivity; // [degC/LSB] (0.0048828125/340/0.000041=0.35)
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
pinMode(pwmHeater, OUTPUT);
pinMode(btnMode, INPUT);
pinMode(btnUp, INPUT);
pinMode(btnDown, INPUT);
Serial.begin(9600);
fTimeLast = millis();
}
float fMeasureOversampling() {
// Iako mozda nema potrebe, uradimo vise merenja za jedno odredjivanje temperature (oversampling), teoretski sa 4^n merenja dobijamo dodatnih n bita.
// It takes about 100 microseconds (0.0001 s) to read an analog input so we can make 1024 measurements = 4^5 to hopfully add 5 bits to reac 10 bits in AD converter, it will took about 0.1s to execute
float fSum = 0.0;
for (int i=1; i <= 1024; i++){
fSum = fSum + analogRead(analogPin);
}
return fSum / 1024 ;
}
float fLimit (float fPromenljiva, float fMax, float fMin){ //Saturation function
if (fPromenljiva > fMax) { fPromenljiva = fMax ; }
if (fPromenljiva < fMin) { fPromenljiva = fMin ; }
return fPromenljiva ;
}
float fSimplePID() {
// calculate PID command, first calculate the coeficients
float fSimplePID;
fIntegralTerm = fIntegralTerm + fKi * fEk * fTimeSampling;
fIntegralTerm = fLimit(fIntegralTerm, 255.0, 0.0);
fSimplePID = fKp * fEk + fIntegralTerm + fKd * (fEk - fEk_1); // SimplePID
fSimplePID = fLimit(fSimplePID, 255.0, 0.0);
return fSimplePID;
}
void RefreshDisplay() {
// 1234567890123456
lcd.setCursor(0, 0);
lcd.print("Set: Temp: ");
lcd.setCursor(4, 0);
lcd.print(fTSet,0);
lcd.setCursor(13, 0);
lcd.print(fTemp,0);
lcd.setCursor(0, 1);
lcd.print("Err: ");
lcd.setCursor(4, 1);
lcd.print(fEk,0);
if (iPID_or_OnOff == 0) { //PID is active controler
lcd.setCursor(8, 1);
lcd.print("%PWM=");
lcd.print(fPWM/2.55 ,0);
}
if (iPID_or_OnOff == 1) { //OnOff is active controler
lcd.setCursor(8, 1);
if (fEk < 0) { lcd.print("Heater:-"); }
else { lcd.print("Heater:A"); }
}
}
void SerialSend() {
Serial.print(fTime,3);
Serial.print(", ");
Serial.print(fTSet,1);
Serial.print(", ");
Serial.print(fTemp,1);
Serial.print(", ");
Serial.print(fEk,1);
Serial.print(", ");
Serial.print(fVoltage,3);
Serial.print(", ");
Serial.print(fTimeSampling,4);
Serial.print(", ");
Serial.print(fEk,3);
Serial.print(", ");
Serial.print(fIntegralTerm,3);
Serial.print(", ");
Serial.print(fPWM,2);
Serial.print(", ");
Serial.println(fIntegralTerm,2);
}
void Buttons() {
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==LOW )) {
fTSet = fTSet + 5.0 ;
if (fTSet > 380.0) { fTSet = 380.0 ; } //LIMIT to 380 degC
}
if ((digitalRead(btnUp) == LOW) && (digitalRead(btnDown) ==HIGH )) {
fTSet = fTSet - 5.0 ;
if (fTSet < 0.0) { fTSet = 0.0 ; } //LIMIT to 0
}
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==HIGH )) {
iPID_or_OnOff++ ; //increment
if (iPID_or_OnOff > 1) { iPID_or_OnOff = 0; } //then reset it to 0
}
if (digitalRead(btnMode) == HIGH) {
fTSet = fTSet + 5.0;
if (fTSet < 150.0) {
fTSet = 150.0 ;
}
if ( (fTSet > 150.0) && (fTSet < 280.0 ) ) { fTSet = 280.0 ; }
if ( (fTSet > 280.0) && (fTSet < 320.0 ) ) { fTSet = 320.0 ; }
if ( (fTSet > 320.0) && (fTSet < 350.0 ) ) { fTSet = 350.0 ; }
if (fTSet > 350.0) { fTSet = 0.0 ; }
}
}
void loop() {
fTime = millis() / 1000.0 ;
fTimeSampling = fTime - fTimeLast;
fTimeLast = fTime ;
fVoltage = fMeasureOversampling() * fLSB; // read the input pin and calculate Voltage
fTemp = fTAmb + fScaleFactor * fVoltage; // calculate the Temperature
fEk = fTSet - fTemp; //error for simple PID
if (iPID_or_OnOff == 1 ) { //On-Off regulator // simple ON-OFF control, works well (about +8 and -2 degC about SetPoint)
if (fEk < 0) { analogWrite(pwmHeater, 0); }
else { analogWrite(pwmHeater, 255); }
}
if (iPID_or_OnOff == 0 ) { //PID regulator
fPWM = fSimplePID(); //calculate PID command
fEk_1 = fEk; //store the last error
analogWrite(pwmHeater, fPWM); //execute the command
}
Buttons(); //read the buttons
if (iSerialSend == 1) { SerialSend() ; } //print on UART, serial port
iCycleCounter++; //increment cycle counter
if (iCycleCounter >= iHowManyCyclesToRefreshDisplay ) { //print od dislplay
RefreshDisplay() ;
iCycleCounter = 0; //reset counter
}
// delay(100); //omitted - goes on approx 0.144 seconds per cycle
}
Ezt a kódot kellene valahogy átcsinálnom hogy működjenek a gombok. Mert itt máshogy vannak megcsinálva, mit a kódban. Ha valaki segitene nagyon megköszönném.
Szia
A máshogy mit jelent pontosan? Más bemenetre vannak kötve?
Még egy kérdés szerintetek uln2803-al érdemes léptetőmotort vezérelni?
Bővebben: Link Igen. Csak az eggyik analóg bemenettel van megcsinálva. Amihez nem értek.
Miután a képernyő szoftverből forgatható, nincs kitüntetett iránya a tapipadnak. Ahogy éppen feltették, x és y irányban is tetszőlegesen viselkedik, azon belül quasi lineárisan adja az ellenállás értékét. Egyszeruen vondd ki a maximális értékből a jelenlegi értéket, máris megkapod a tükörképét. Ha az y tengelyen hasonló a gond, akkor azt is.
Mármint honnan tudom meg a jelenlegi értéket?
short TS_MINX=150;
short TS_MINY=120;
short TS_MAXX=920;
short TS_MAXY=940;
Ebből?
Szia
A Buttons() függvényt kellene átírni úgy , hogy a bemenetek lekérdezése helyett egy analóg read legyen benne. Bővebben: Link
-Az ellenállás értékekből meg kell határozni, hogy az adott gombok benyomásakor milyen feszültségintervallumon belül lesz az analóg érték a bemeneten.
-Ehhez ki kell számolni az A/D konverzió eredményét.
-A kapott értékeknek megfelelően le kell módosítani az IF-eket.
Előtte az analóg bemenetet be kell állítani a setup-ban.
Most nézem, hogy a rajzon 5 gomb van a programban meg csak 3 + 1 poti, úgyhogy az fMeasureOversampling()-ot is át kellene alakítani.
Ha nincs megnyomva akkor 1023, 640-641, bal 410-411, jobbra 0, fel 99-100, le 256-257. Nekem csak 3 gomb kellene, fel-le, .
szerk: ilyesmit találtam: // define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
// For V1.0 comment the other threshold and use the one below:
/*
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
*/
A hozzászólás módosítva: Okt 20, 2015
Sajnos ezt nem tudom, c-hez nem ertek, de nekem ezek konstansoknak tunnek. Talan a negy sarka a mukodo zonanak. A jelenlegi ertek alatt a poziciot ertem, mondjuk x iranyban.
Az egyik szele nulla, a masik mondjuk 1024. Ha kaptal a jobb szele fele pl. egy 100-as erteket, akkor 1024-100, azaz 924 a tenyleges pozicio. A hozzászólás módosítva: Okt 20, 2015
Egyszerű és nagyszerű bemeneti port csökkentő eljárás ez uC világban.
Az analóg bemenetre kapcsolt ellenállások és nyomógombok mindig más más feszültség szintet hoznak létre a az AD-n.
Így a 4 gomb nyomás pl.: 1 2 3 4 5 Volt értéket vehet fel.
(feszültség osztó képlettel ezt az alkatrészek ismeretében ki kell számolni, majd azt a digitális 0-1023(10 bites AD esetén) közti értékre vissza számolni , vagy soros porton kiíratni a fejlesztéskor némi ráhagyással +/- 20-30 értékkel ráhagyást beállítani a szoftveres változó kiértékeléskor)
Ezt a szoftverből pedig eldöntöd melyik feszültség esetén, melyik gomb funkció valósul meg.
Végül is egy szoftveres feszültség ablak komparátor van megírva. A hozzászólás módosítva: Okt 20, 2015
Ottvan, elébb leirtam mindent. Csak a programba nemtudom behelyezni.
Na már a fel-le jó csak a balra-jobbra van tükrözve! De már végig néztem vagy 100 X a programot de nem találom a hibát. Valaki segítene?
Mármint az egészet forráskódban újra írni , átalakítani?
Még úgy se ,hogy leírtuk miként dolgozik az ellenállásosztós több gombos bemenet?
analogRead függvény használata se megy ?
Akkor itt van 1 kis segítség : analog read
AnalogInput
A program fő ciklusában érdemes berakni olyan függvényt amivel lehet olvasgatni az analóg portot is amire a gombokat kötötted. Ekkor észre veszi a gombnyomásokat is a rendszered.
Mivel folyamatosan "pollingolja" a porton történő változásokat. A hozzászólás módosítva: Okt 20, 2015
Analog read-el olvastam ki a gombokat. Azt tudtam. Ha nincs megnyomva akkor 1023, select gomb 640-641, bal 410-411, jobbra 0, fel 99-100, le 256-257. A hozzászólás módosítva: Okt 20, 2015
Akkor neked csak a 3 gomb kell akkor válaszd ki melyik 3 kell és azok fizikálisan melyik osztó pontra vannak kötve. Abból lesz digit értéked .
Aztán a button függvényt átalakítod analóg reades kiértékelőként 3 gombra .
Ezt:
void Buttons() {
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==LOW )) {
fTSet = fTSet + 5.0 ;
if (fTSet > 380.0) { fTSet = 380.0 ; } //LIMIT to 380 degC
}
if ((digitalRead(btnUp) == LOW) && (digitalRead(btnDown) ==HIGH )) {
fTSet = fTSet - 5.0 ;
if (fTSet < 0.0) { fTSet = 0.0 ; } //LIMIT to 0
}
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==HIGH )) {
iPID_or_OnOff++ ; //increment
if (iPID_or_OnOff > 1) { iPID_or_OnOff = 0; } //then reset it to 0
}
if (digitalRead(btnMode) == HIGH) {
fTSet = fTSet + 5.0;
if (fTSet < 150.0) {
fTSet = 150.0 ;
}
if ( (fTSet > 150.0) && (fTSet < 280.0 ) ) { fTSet = 280.0 ; }
if ( (fTSet > 280.0) && (fTSet < 320.0 ) ) { fTSet = 320.0 ; }
if ( (fTSet > 320.0) && (fTSet < 350.0 ) ) { fTSet = 350.0 ; }
if (fTSet > 350.0) { fTSet = 0.0 ; }
}
}
Olyanra hogy most pszeudokódban írok (zanzásítva) :
Ha (if) analogread portszám/név= FELgombértéke akkor Hő = Hő+5
különben (else)
ha Hő > maxhő akkor Hő = maxHő
Ha (if) analogread analogread portszám/név = LEgombértéke akkor Hő = Hő-5
különben (else)
ha Hő < minhő akkor Hő = minHő
Ha (if) analogread portszám/név= Funkciógombértéke akkor valami=valami+más
különben (else) valamivel történjen sokkalmássabb mint eddig
Ennél egyszerűbben nem tudom kitálni azt ,hogy mit szeretnél csinálni.
Na sikerült meg oldani  Esetleg valaki tud olyan alap programot hogy az érintőképernyőn benyomok egy gombot akkor az egyik lábon rá kapcsol pl 5 voltot x ideig??
|
|