Hasznal valaki https://github.com/MCUdude/MightyCore IDE-t? most vettem hogy egy sketchet toltsek ra erre az Atmega1284P aramkorre ( https://github.com/IoTDevicesCH/LoraMidiAtmega1284P ) amiben mar benne van a bootloader es sorosan kellene hogy menjen. Hat ahogy az szokott lenni, nem megy. RX es TX-et a Mightyrol a D8 es D9 rol vettem le. Nem vagyok nagyon jartas aruinoba. Get board info azt irka ki hogy ismeretlen.
Én próbáltam megtanulni a programnyelvet de nem nagyon megy,nem vagyok már fiatal és nem tudok angolul,így a könnyebbik utat szeretném választani,de nem 3 érzékelő kell még hozzá rendelni hanem még 4 db.
Ez is egy tervezési megközelítés (kb. mint a „gombhoz a kabátot”), de működhet és eredményes lehet.
Ami a kódot illeti. A legfontosabb kérdés, hogy meg akarsz-e tanulni, meg akarod-e érteni? Innen két út van. Vagy a nehezebb, de szórakoztatóbb utat választod, amin segítünk elindulni és eljutni a célig [tanulás], vagy van egy könnyebb, amin valaki vállalja, hogy megcsinálja neked a kódot.
Amit beidéztél, abban azért van annyi jóság, hogy messze nem a legrosszabb arduino kód, amit valaha láttam. Át lehet alakítani nagyjából működőre (hardver oldalon is kell picit mókolni vele, hisz kell további 3 hőmérséklet szenzor), még nem is kellene hozzá istentelenük sok idő.
//============================================================= // Setup //============================================================= void setup() { // initialize the digital pin as an output. Serial.begin(9600); pinMode(Data, OUTPUT); pinMode(Clock, OUTPUT); pinMode(Latch, OUTPUT); pinMode(SEG0, OUTPUT); pinMode(SEG1, OUTPUT); pinMode(SEG2, OUTPUT); pinMode(SEG3, OUTPUT);
//Initialize Display Scanner cc=0; Timer1.initialize(1000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second) Timer1.attachInterrupt( timerIsr ); // attach the service routine here } //============================================================= // Loop //============================================================= void loop() { char Volt[4]; int Voltage=analogRead(A0); Serial.println(Voltage);
R2 = R1* (1023.0 / (1023-(float)Voltage) - 1.0); logR2 = log(R2); T = (1.0 / ((A + B*logR2 + C*logR2*logR2*logR2))); // Steinhart and Hart Equation. T =(1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); T = T - 273.15; T = T * 10; Serial.println(T);
// // //To get fixed point decimal point we multiply it by 100 // Voltage = (5000/1024.0) * (1023-Voltage); //Scaling of 0 to 5V i.e. 0 to 1023 to 0 to 10 (in 10 steps) // //Display Voltage on Segments sprintf(Volt,"%04d", (int)T); //We get ASCII array in Volt // Serial.println(Voltage);
Value[0]=Volt[0] & 0x0F; //Anding with 0x0F to remove upper nibble Value[1]=Volt[1] & 0x0F; //Ex. number 2 in ASCII is 0x32 we want only 2 Value[2]=Volt[2] & 0x0F; Value[3]=Volt[3] & 0x0F; delay(1000); }
for(i=0;i<8;i++) //Shift bit by bit data in shift register { if((d & 0x80)==0x80) { digitalWrite(Data,HIGH); } else { digitalWrite(Data,LOW); } d=d<<1;
//Give Clock pulse digitalWrite(Clock,LOW); digitalWrite(Clock,HIGH); } //Latch the data digitalWrite(Latch,LOW); digitalWrite(Latch,HIGH); } //=================================================================== // TIMER 1 OVERFLOW INTTERRUPT FOR DISPALY //=================================================================== void timerIsr() { cc++; if(cc==5) //We have only 4 digits {cc=1;} Scanner(); TCNT0=0xcc; }
//=================================================================== // SCAN DISPLAY FUNCTION //=================================================================== void Scanner() { switch (cc) //Depending on which digit is selcted give output { case 1: digitalWrite(SEG3,HIGH); DisplayDigit(SegData[Value[0]]); digitalWrite(SEG0,LOW); break; case 2: digitalWrite(SEG0,HIGH); DisplayDigit(SegData[Value[1]]); digitalWrite(SEG1,LOW); break; case 3: digitalWrite(SEG1,HIGH); DisplayDigit(SegData[Value[2]] | 0x80); //0x80 to turn on decimal poin digitalWrite(SEG2,LOW); break; case 4: digitalWrite(SEG2,HIGH); DisplayDigit(SegData[Value[3]]); digitalWrite(SEG3,LOW); break;
> alap, hogy a hardvert a feladathoz választjuk meg
A munkámban pontosan így teszek. Otthoni projektenél viszont sokszor egy-egy bontásból kapott panel indítja be a fantáziámat, hogy mit is kezdhetnék vele. :-) Szóval megértem, ha ezzel szeretné csinálni. Nem ideális, de lehetséges.
Miért villogna? A megjelenítást megszakításból kell intézni, és akkor garantált rendszerességgel lefut a szükséges kód.
De ha nagyon sok más feladata is van az MCU-nak, akkor lehet azt, hogy kettőt használ. Egyik csak mér és számol, a másik csak kijelez. A kettőt pedig össze lehet kötni valamilyen soros megoldással (UART, SPI, I2C).
Nyilván meg lehet oldani ezzel is, de alap, hogy a hardvert a feladathoz választjuk meg, ehhez a feladathoz pedig nem ez a kijelző az optimális választás.
Vannak amúgy facebook csoportok, ahol nagyon örülnének ilyen kijelző paneleknek, tehát simán el tudnád adni és az áruk töredékéből tudnál venni olyan kijelzőt, ami nagyságrenddel kevesebb alkatrészt és szívást generál, mivel hogy egy I2C 4 digites kijelző ára akár a 300 forintot is súrolhatja...
Amúgy nézhet ez ki így is jól, ha egy kicsit villog, csak annál retróbb...
Amúgy pusztán a kijelzés még nem is biztos, hogy nagyon villogna, de ha minden mást is azzal a szegény nanoval akarsz csinálni, hát hmmm...
Én ezt egy fűtésvezérléssel kötném össze,puffer tartály hőérzékelője lenne meg vezérelné szivattyúkat is ,és rengeteg kijelzőm van, ezért gondoltam ezzel megoldani.
Rajta van a rajzon a válasz a kérdésedre. Ez egy multiplexelt megoldás. Négy kimenet van az egyes kijelzők anódjainak az 1/10/100/1000 helyiértékhez, és három kimenet a shift registerek meghajtásához (DO, CLK, LATCH). Ha az OE is be lenne kötve, tudnál pwm-mel fényerőt szabályozni. Ahogy tanult kollégám írta, ez azért nagyon old-school megoldás, manapság akár az egyedileg címezhető ledek, akár a soros vonalon meghajtható direkt 4 digites 7 szegmenses kijelzők a "divat", utóbbihoz 2 vonal elég (i2c, pl. TM1637). Ez a rendszer működni fog, de nagy lesz a kódja és emiatt (viszonylag) lassú lesz a futása. Illetve ha tényleg így van bekötve, akkor fenemód villódzni fog a kijelző is.
Konkrétan megvannak a kijelzők, amikre ki kell írni a dolgot?
Én csináltam egy készüléket, ami 3 különböző helyen írta ki ugyanazt az értéket, sima 7-szegmenses kijelzővel, egy darlington mező kapcsolgatja a szegmenseket, mert nagy méretű kijelzők voltak, nem kellett hozzá semmilyen shift regiszter, sima portbővítőkkel ment és egy mezítlábas ATM328-cal.
Illetve megy is a mai napig, pedig vagy 10 éves a cucc.
Ja, 3 digites egy kijelző és van még egy minusz jel is.
Ez egy kvíz-gomb készlet amúgy, amilyennel a TV-ben is játszanak, mindegyiken látszik a játékos saját pontszáma nagyban, hogy a közönség is lássa és ő felül kisebb kijelzőkön látja a saját pontjait és a többiekét is.
De most már máshogy csinálnám, vezérelhető LED-szalaggal, vagy akár egyedi vezérelhető LED-ekkel egyetlen lábon bármit ki tudsz íratni, kicsit agyalni kell a mechanikán, de 3D nyomtatással simán olcsóbban jön ki, mint egyedi 7 szegmenses kijelzőkkel és szó szerint bármin elmegy.
Az Arduino új IDE-jében (talán az 1.8-tól, de ebben nem vagyok biztos) teljes támogatással implementálva van a HC595 shift register támogatását biztosító ShiftOut() és shiftIn() függvény. Ezzel korábban nekem sikerült 8×4×4 sorba és párhuzamosan kötött shift registert meghajtani (az MEGA volt). De ha csak egy vonalat használsz és a vezetékelésed is megfelelő (nincs fáziseltérés a jelfolyamokban), akkor olyan 20-22 elemet tudsz sorba kötni, ez 160-176 diszkrét kimenet. Ha 7 szegmenses kijelzőről van szó, akkor az 8 × 5 × 4 = 160 kimenet, tehát a 4 db shift register ide nagyon-nagyon kevés lesz (illetve nem, mert multiplexelve így is meg lehet hatani, de az akkor 5 további lábat foglal és félek, hogy itt azért már látható villódzás lenne. Itt a két leírás angolul:
Érdeklődni szeretnék arduino nano digitális kimenetén soros digitális jelet küldeni ,hogy maximum hány bítes lehet,mert 5x4 digites kijelzőt hajtanák meg 4 db 74hc595 ic keresztül. 4 különálló hőmérsékletet mérnék vele.
Két út van. Vagy próbáld ki teljesen másik gépen, teljesen másik USB kábellel, frissen installált meghajtókkal. Ha ott sem működik, akkor az van (2. út), hogy hibás a panel.
Ha linket szúrsz be, akkor azt csináld úgy, hogy új lapon nyíljon és ne ezen, mert rohadtul szar újraírni a kommentet amiatt, mert ha rákattintok, akkor elnavigál erről az oldalról. Az index fórum a hülye, de érdemes erre figyelni.
Szóval.
Ad-e az "Alaplap Info beszerzése" menü bármilyen érdemi választ? Ha nem, akkor nem is látja az MCU-t az IDE.
Ha itt van válasz, akkor lehet tovább menni arra, hogy az alaplapot átállítod NANO-ra, a processzort pedig 328P (Old Bootloader)-re, és ezzel teszel egy próbát.
A vázlat 444 bájt (1%)-ot használ a program tárhelyből. A maximum 32256 bájt. A globális változók 9 bájt (0%)-ot használnak a dinamikus memóriából, 2039 bájtot hagyva a helyi változóknak. A maximum 2048 bájt. avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x95 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x95 Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
Ennek a jelentésnek több információja lehetne a "Bővebb kimenet mutatása fordításkor" opció engedélyezésével a Fájl -> Beállítások-ban.
szedd le és rakd fel teljesen újra az illesztőprogramokat (körülményes, de néha megéri), amíg kész nincs, NE dugd rá az eszközt, amikor viszont kész van, fel kell(ene) ismernie,
Köszönöm. Szerintem az illesztőprogramal lesz valami. Nem tudnál esetleg egy linket adni hogy honnan lehet egy ilyet beszerezni és hogyan lehet telepíteni?
Ha összedugtad a PC-t az Arduino-val, utána az eszközkezelőben nézd meg a soros portokat. Ha ott látod (mellette a COMxx), akkor a Windows felismerte. Az Arduino IDE-t újraindítva már ki tudod választani a soros portot.
Ha nem látod az eszközkezelőben a com portoknál, akkor illesztőprogram baja van, vagy nem látja egyáltalán az eszközt.
Ha látsz egy ismeretlen eszközt akkor illesztő program baja van.
Ha nem látsz ismeretlen eszközt sem, akkor a kártyával van valami.
Van egy Arduino UNO R3 .Tudnátok segíteni abban, hogy ha összekötöm az arduinot a pc-vel akkor nem jeleníti meg az arduino IDE programban az arduino alaplapot a portok listájában. Mi lehet a gond? hogy tudom megoldani? Eredeti az arduino alaplap
Ugyebár az első gond, hogy egyáltalán nem olvasol be semmit a keypad-ről.
Nézd meg a libraryhez tartozó példákat és keress olyat, hogy keypad.getKey()
Ekkor karakterként fogja beolvasni a megnyomott gombot, azt át kell alakítanod számmá.
Aztán már csak ki kell íratni, ahhoz meg a kijelző példáit javaslom, az lcd.print() semmi mást nem csinál, mint az aktuális pozícióba kiírja a változó értékét, amit most nem változtat meg semmi, az aktuális pozíció pedig az lesz, ahol az előző kiíratást befejezte.
Szóval nyilván törölni kell a kijelzőt, aztán a kívánt pozícióba állítani és oda kiíratni.
De első körben kezdd az adatbevitellel és írasd ki a soros monitorra a változó tartalmát.
Ha ott már minden jó, kezdhetsz játszani a kijelzéssel.