Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   148 / 863
(#) saua hozzászólása Aug 30, 2015 /
 
Sziasztok,

Van arra lehetőség, hogy miután egy androidos telefon kapcsolódik bluetoothon keresztül egy arduinoval, és a távolság miatt megszakad a kapcsolat, mikor megint visszakerül az arduinó hatósugarába a kapcsolat automatikusan létrejöjjön?

Például a hozzászólásban említett applikáció.
(#) atus1981 hozzászólása Aug 30, 2015 /
 
Sziasztok!
Beszereztem egy USB SHIELD-et UNO-hoz. A minta programok működnek vele (egér, klavi, stb.).
Viszont van egy OBD2 kábelem, aminek USB a vége és ezt szeretném összehangolni. Nem találkozott valaki hasonló problémával, vagy esetleg egy projekttel, ahol a fenti eszközök voltak használva?
Köszönöm a segítséget.
(#) atus1981 válasza atus1981 hozzászólására (») Aug 30, 2015 /
 
Találtam egy ilyet:
  1. #include <SoftwareSerial.h>
  2.  
  3. //Create an instance of the new soft serial library to control the serial LCD
  4. //Note, digital pin 3 of the Arduino should be connected to Rx of the serial LCD.
  5.  
  6. SoftwareSerial lcd(2,3);
  7.  
  8. //This is a character buffer that will store the data from the serial port
  9. char rxData[20];
  10. char rxIndex=0;
  11.  
  12. //Variables to hold the speed and RPM data.
  13. int vehicleSpeed=0;
  14. int vehicleRPM=0;
  15.  
  16. void setup(){
  17.   //Both the Serial LCD and the OBD-II-UART use 9600 bps.
  18.   lcd.begin(9600);
  19.   Serial.begin(9600);
  20.  
  21.   //Clear the old data from the LCD.
  22.   lcd.write(254);
  23.   lcd.write(1);  
  24.  
  25.   //Put the speed header on the first row.
  26.   lcd.print("Speed: ");
  27.   lcd.write(254);
  28.   //Put the RPM header on the second row.
  29.   lcd.write(128+64);
  30.   lcd.print("RPM: ");
  31.  
  32.   //Wait for a little while before sending the reset command to the OBD-II-UART
  33.   delay(1500);
  34.   //Reset the OBD-II-UART
  35.   Serial.println("ATZ");
  36.   //Wait for a bit before starting to send commands after the reset.
  37.   delay(2000);
  38.  
  39.   //Delete any data that may be in the serial port before we begin.
  40.   Serial.flush();
  41. }
  42.  
  43. void loop(){
  44.   //Delete any data that may be in the serial port before we begin.  
  45.   Serial.flush();
  46.   //Set the cursor in the position where we want the speed data.
  47.   lcd.write(254);
  48.   lcd.write(128+8);
  49.   //Clear out the old speed data, and reset the cursor position.
  50.   lcd.print("        ");
  51.   lcd.write(254);
  52.   lcd.write(128+8);
  53.   //Query the OBD-II-UART for the Vehicle Speed
  54.   Serial.println("010D");
  55.   //Get the response from the OBD-II-UART board. We get two responses
  56.   //because the OBD-II-UART echoes the command that is sent.
  57.   //We want the data in the second response.
  58.   getResponse();
  59.   getResponse();
  60.   //Convert the string data to an integer
  61.   vehicleSpeed = strtol(&rxData[6],0,16);
  62.   //Print the speed data to the lcd
  63.   lcd.print(vehicleSpeed);
  64.   lcd.print(" km/h");
  65.   delay(100);
  66.  
  67.   //Delete any data that may be left over in the serial port.
  68.   Serial.flush();
  69.   //Move the serial cursor to the position where we want the RPM data.
  70.   lcd.write(254);
  71.   lcd.write(128 + 69);
  72.   //Clear the old RPM data, and then move the cursor position back.
  73.   lcd.print("          ");
  74.   lcd.write(254);
  75.   lcd.write(128+69);
  76.  
  77.   //Query the OBD-II-UART for the Vehicle rpm
  78.   Serial.println("010C");
  79.   //Get the response from the OBD-II-UART board
  80.   getResponse();
  81.   getResponse();
  82.   //Convert the string data to an integer
  83.   //NOTE: RPM data is two bytes long, and delivered in 1/4 RPM from the OBD-II-UART
  84.   vehicleRPM = ((strtol(&rxData[6],0,16)*256)+strtol(&rxData[9],0,16))/4;
  85.   //Print the rpm data to the lcd
  86.   lcd.print(vehicleRPM);
  87.  
  88.   //Give the OBD bus a rest
  89.   delay(100);
  90.  
  91. }
  92.  
  93. //The getResponse function collects incoming data from the UART into the rxData buffer
  94. // and only exits when a carriage return character is seen. Once the carriage return
  95. // string is detected, the rxData buffer is null terminated (so we can treat it as a string)
  96. // and the rxData index is reset to 0 so that the next string can be copied.
  97. void getResponse(void){
  98.   char inChar=0;
  99.   //Keep reading characters until we get a carriage return
  100.   while(inChar != '\r'){
  101.     //If a character comes in on the serial port, we need to act on it.
  102.     if(Serial.available() > 0){
  103.       //Start by checking if we've received the end of message character ('\r').
  104.       if(Serial.peek() == '\r'){
  105.         //Clear the Serial buffer
  106.         inChar=Serial.read();
  107.         //Put the end of string character on our data string
  108.         rxData[rxIndex]='\0';
  109.         //Reset the buffer index so that the next character goes back at the beginning of the string.
  110.         rxIndex=0;
  111.       }
  112.       //If we didn't get the end of message character, just add the new character to the string.
  113.       else{
  114.         //Get the new character from the Serial port.
  115.         inChar = Serial.read();
  116.         //Add the new character to the string, and increment the index variable.
  117.         rxData[rxIndex++]=inChar;
  118.       }
  119.     }
  120.   }
  121. }


Amiben úgy látom, hogy a 010C és 010D karaktereket kellene küldeni az OBD2 felé és várni a válaszra....
Viszont hogyan mondom meg az arduinonak, hogy oda küldje és onnan várja a választ, valamint meg tudjam jeleníteni LCD-n vagy COM porton?
A hozzászólás módosítva: Aug 30, 2015
(#) Kovidivi válasza atus1981 hozzászólására (») Aug 30, 2015 /
 
Ez nem hexadecimális szám akar lenni inkább? 010C , vagyis 0x010C, ami egyenlő 268-cal decimálisban.
A szoftveres soros portot miért használod? Használd a perifériát. Plusz ez: " Serial.begin(9600);" szerintem a perifériát nyitja meg, nem pedig a szoftverest. De ennek majd utána nézel.
Amit észrevettem, hogy a példában először serial.begin van, és csak utána jöhetne az lcd.begin.
Bővebben: Link
A hozzászólás módosítva: Aug 30, 2015
(#) atus1981 válasza Kovidivi hozzászólására (») Aug 30, 2015 /
 
Ezt a példát a sparkfun oldalon találtam. Amiket felvetettél, nem sok értelmét látom én sem.
a 010C és a 010D-re egy OBD.h tartalma ad választ, mégpedig:

  1. #include <Arduino.h>
  2.  
  3. #define OBD_MODEL_UART 0
  4. #define OBD_MODEL_I2C 1
  5.  
  6. #define OBD_TIMEOUT_SHORT 2000 /* ms */
  7. #define OBD_TIMEOUT_LONG 7000 /* ms */
  8. #define OBD_SERIAL_BAUDRATE 38400
  9. #define OBD_RECV_BUF_SIZE 128
  10.  
  11. #ifndef OBDUART
  12. #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168P__)
  13. #define OBDUART Serial
  14. #else
  15. #define OBDUART Serial1
  16. #endif
  17. #endif
  18.  
  19. // Mode 1 PIDs
  20. #define PID_ENGINE_LOAD 0x04
  21. #define PID_COOLANT_TEMP 0x05
  22. #define PID_SHORT_TERM_FUEL_TRIM_1 0x06
  23. #define PID_LONG_TERM_FUEL_TRIM_1 0x07
  24. #define PID_SHORT_TERM_FUEL_TRIM_2 0x08
  25. #define PID_LONG_TERM_FUEL_TRIM_2 0x09
  26. #define PID_FUEL_PRESSURE 0x0A
  27. #define PID_INTAKE_MAP 0x0B
  28. #define PID_RPM 0x0C
  29. #define PID_SPEED 0x0D
  30. #define PID_TIMING_ADVANCE 0x0E
  31. #define PID_INTAKE_TEMP 0x0F
  32. #define PID_MAF_FLOW 0x10
  33. #define PID_THROTTLE 0x11
  34. #define PID_AUX_INPUT 0x1E
  35. #define PID_RUNTIME 0x1F
  36. #define PID_DISTANCE_WITH_MIL 0x21
  37. #define PID_COMMANDED_EGR 0x2C
  38. #define PID_EGR_ERROR 0x2D
  39. #define PID_COMMANDED_EVAPORATIVE_PURGE 0x2E
  40. #define PID_FUEL_LEVEL 0x2F
  41. #define PID_WARMS_UPS 0x30
  42. #define PID_DISTANCE 0x31
  43. #define PID_EVAP_SYS_VAPOR_PRESSURE 0x32
  44. #define PID_BAROMETRIC 0x33
  45. #define PID_CATALYST_TEMP_B1S1 0x3C
  46. #define PID_CATALYST_TEMP_B2S1 0x3D
  47. #define PID_CATALYST_TEMP_B1S2 0x3E
  48. #define PID_CATALYST_TEMP_B2S2 0x3F
  49. #define PID_CONTROL_MODULE_VOLTAGE 0x42
  50. #define PID_ABSOLUTE_ENGINE_LOAD 0x43
  51. #define PID_RELATIVE_THROTTLE_POS 0x45
  52. #define PID_AMBIENT_TEMP 0x46
  53. #define PID_ABSOLUTE_THROTTLE_POS_B 0x47
  54. #define PID_ABSOLUTE_THROTTLE_POS_C 0x48
  55. #define PID_ACC_PEDAL_POS_D 0x49
  56. #define PID_ACC_PEDAL_POS_E 0x4A
  57. #define PID_ACC_PEDAL_POS_F 0x4B
  58. #define PID_COMMANDED_THROTTLE_ACTUATOR 0x4C
  59. #define PID_TIME_WITH_MIL 0x4D
  60. #define PID_TIME_SINCE_CODES_CLEARED 0x4E
  61. #define PID_ETHANOL_FUEL 0x52
  62. #define PID_FUEL_RAIL_PRESSURE 0x59
  63. #define PID_HYBRID_BATTERY_PERCENTAGE 0x5B
  64. #define PID_ENGINE_OIL_TEMP 0x5C
  65. #define PID_FUEL_INJECTION_TIMING 0x5D
  66. #define PID_ENGINE_FUEL_RATE 0x5E
  67. #define PID_ENGINE_TORQUE_DEMANDED 0x61
  68. #define PID_ENGINE_TORQUE_PERCENTAGE 0x62
  69. #define PID_ENGINE_REF_TORQUE 0x63
  70.  
  71. typedef enum {
  72.     PROTO_AUTO = 0,
  73.     PROTO_ISO_9141_2 = 3,
  74.     PROTO_KWP2000_5KBPS = 4,
  75.     PROTO_KWP2000_FAST = 5,
  76.     PROTO_CAN_11B_500K = 6,
  77.     PROTO_CAN_29B_500K = 7,
  78.     PROTO_CAN_29B_250K = 8,
  79.     PROTO_CAN_11B_250K = 9,
  80. } OBD_PROTOCOLS;
  81.  
  82. // states
  83. typedef enum {
  84.     OBD_DISCONNECTED = 0,
  85.     OBD_CONNECTING = 1,
  86.     OBD_CONNECTED = 2
  87. } OBD_STATES;
  88.  
  89. typedef struct {
  90.     uint32_t date;
  91.     uint32_t time;
  92.     int32_t lat;
  93.     int32_t lon;
  94.     int alt;
  95.     float speed;
  96.     int heading;
  97.     int sat;
  98. } GPS_DATA;
  99.  
  100. uint16_t hex2uint16(const char *p);
  101. uint8_t hex2uint8(const char *p);
  102.  
  103. class COBD
  104. {
  105. public:
  106.         COBD():dataMode(1),errors(0),m_state(OBD_DISCONNECTED) {}
  107.         /*
  108.        Serial baudrate is only adjustable for Arduino OBD-II Adapters V2
  109.         */
  110.         virtual void begin();
  111.         // initialize OBD-II connection
  112.         virtual bool init(OBD_PROTOCOLS protocol = PROTO_AUTO);
  113.         // un-initialize OBD-II connection
  114.         virtual void end();
  115.         // set serial baud rate
  116.         virtual bool setBaudRate(unsigned long baudrate);
  117.         // get connection state
  118.         virtual OBD_STATES getState() { return m_state; }
  119.         // read specified OBD-II PID value
  120.         virtual bool read(byte pid, int& result);
  121.         // set device into
  122.         virtual void sleep();
  123.         // set working protocol (default auto)
  124.         virtual bool setProtocol(OBD_PROTOCOLS h = PROTO_AUTO);
  125.         // send AT command and receive response
  126.         virtual byte sendCommand(const char* cmd, char* buf = 0);
  127.         // clear diagnostic trouble code
  128.         virtual void clearDTC();
  129.         // get battery voltage (in 0.1V, e.g. 125 for 12.5V, works without ECU)
  130.         virtual float getVoltage();
  131.         // get VIN as a string, buffer length should be >= OBD_RECV_BUF_SIZE
  132.         virtual bool getVIN(char* buffer);
  133.         // send query for specified PID
  134.         virtual void sendQuery(byte pid);
  135.         // retrive and parse the response of specifie PID
  136.         virtual bool getResult(byte& pid, int& result);
  137.         // determine if the PID is supported
  138.         virtual bool isValidPID(byte pid);
  139.         // init GPS module
  140.         virtual bool initGPS(unsigned long baudrate = 38400);
  141.         // parse GPS data
  142.         virtual bool getGPSData(GPS_DATA* gdata);
  143.         // set current PID mode
  144.         byte dataMode;
  145.         // occurrence of errors
  146.         byte errors;
  147.         // bit map of supported PIDs
  148.         byte pidmap[4 * 4];
  149. protected:
  150.         virtual char* getResponse(byte& pid, char* buffer);
  151.         virtual byte receive(char* buffer = 0, int timeout = OBD_TIMEOUT_SHORT);
  152.         virtual bool available();
  153.         virtual char read();
  154.         virtual void write(const char* s);
  155.         virtual void write(char c);
  156.         virtual void dataIdleLoop() {}
  157.         void recover();
  158.         void debugOutput(const char* s);
  159.         int normalizeData(byte pid, char* data);
  160.         OBD_STATES m_state;
  161. private:
  162.         virtual uint8_t getPercentageValue(char* data)
  163.         {
  164.                 return (uint16_t)hex2uint8(data) * 100 / 255;
  165.         }
  166.         virtual uint16_t getLargeValue(char* data)
  167.         {
  168.                 return hex2uint16(data);
  169.         }
  170.         virtual uint8_t getSmallValue(char* data)
  171.         {
  172.                 return hex2uint8(data);
  173.         }
  174.         virtual int16_t getTemperatureValue(char* data)
  175.         {
  176.                 return (int)hex2uint8(data) - 40;
  177.         }
  178. };
  179.  
  180. #define I2C_ADDR 0x62
  181.  
  182. #define MAX_PAYLOAD_SIZE 32
  183. #define MAX_PIDS 8
  184.  
  185. #define CMD_QUERY_STATUS 0x10
  186. #define CMD_SEND_AT_COMMAND 0x11
  187. #define CMD_APPLY_OBD_PIDS 0x12
  188. #define CMD_LOAD_OBD_DATA 0x13
  189. #define CMD_GPS_SETUP 0x14
  190. #define CMD_GPS_QUERY 0x15
  191.  
  192. typedef struct {
  193.     uint16_t age;
  194.     uint16_t value;
  195. } PID_INFO;
  196.  
  197. typedef struct {
  198.     uint16_t time;
  199.     uint8_t message;
  200.     uint8_t data;
  201. } COMMAND_BLOCK;
  202.  
  203. class COBDI2C : public COBD {
  204. public:
  205.         void begin();
  206.         void end();
  207.         bool read(byte pid, int& result);
  208.         void write(const char* s);
  209.         // API not applicable
  210.         bool setBaudRate(unsigned long baudrate) { return false; }
  211.         // Asynchronized access API
  212.         void setPID(byte pid, byte obdPid[]);
  213.         void applyPIDs(byte obdPid[]);
  214.         void loadData(PID_INFO obdInfo[]);
  215. protected:
  216.         byte receive(char* buffer = 0, int timeout = OBD_TIMEOUT_SHORT);
  217.         bool sendCommandBlock(byte cmd, uint8_t data = 0, byte* payload = 0, byte payloadBytes = 0);
  218. };
  219. [/code
  220.  
  221. és ehhez tatozik egy ilyen példa:
  222. [code=c]#include <Arduino.h>
  223. #include <Wire.h>
  224. #include <OBD.h>
  225.  
  226. COBD obd;
  227.  
  228. void setup()
  229. {
  230.   // we'll use the debug LED as output
  231.   pinMode(13, OUTPUT);  
  232.   // start communication with OBD-II UART adapter
  233.   obd.begin();
  234.   // initiate OBD-II connection until success
  235.   while (!obd.init());  
  236. }
  237.  
  238. void loop()
  239. {
  240.   int value;
  241.   if (obd.read(PID_RPM, value)) {
  242.     // RPM is successfully read and its value stored in variable 'value'
  243.     // light on LED when RPM exceeds 3000
  244.     digitalWrite(13, value > 3000 ? HIGH : LOW);
  245.   }
  246. }

Viszont több 10ezer forint lenne megvenni a ttl-uart adaptert vagy az obd2 shieldet.
Ezért gondoltam, hogy ha már van egy USB-s OBD2 kábelem, akkor egy USB host shield-del kapcsolnám össze.
(#) erdeidominik1999 hozzászólása Aug 30, 2015 /
 
Sziasztok! Tudom nem témába vág, de nem tudtok valami android programozás gyorstalpalót, mert csináltam egy webszervert arduból, és szeretnék hozzá csinálni egy appot is, amivel udp-n kommunikál. Viszont ugye az appot java-ban kell írni, amihez semmit sem konyitok.
(#) saua válasza erdeidominik1999 hozzászólására (») Aug 30, 2015 / 1
 
Esetleg meg lehetne próbálni az appinventort, habár ez is elég komplikáltnak néz ki. Viszont lehet, hogy találsz ezzel készült kész appot, amit már egyszerübb módosítani.
példa
(#) erdeidominik1999 válasza saua hozzászólására (») Aug 30, 2015 /
 
Köszi, még mindíg egyszerűbb, mint az eclipse, viszont nézegettem, és úgy látom, hogy csak web klienset tud kezelni, tehát az url-lel játszik, viszont én udp-t szeretnék, mert akkor meg tudnám csinálni, hogy a csomagban benne van a felhasználónév, jelszó, így meg nem tudok hitelesítést csinálni.
(#) csatti2 válasza erdeidominik1999 hozzászólására (») Aug 31, 2015 /
 
Szerintem te egy kicsit kevered a szezont a fazonnal.
1, Az url és udp nem egymást kölcsönesen kizáró fogalmak. Az egyik egy "barátságos" módot bíztosít a távoli fél (erőforrás) azonosítására. A másik pedig egy hálózati protokoll.
2, Nem tudom, miért csak udp-vel lehetne megcsinálni, hogy benne legyen az azonosítás. A tcp csomagban ugyanúgy benne lehet.
3, Valószínűleg tcp-vel jobban meg lehet valósítani a feladatodat. Az udp speciálisabb feladatokra való (real time jellegű adatcsere, ahol nem baj ha egy két csomag elveszik vagy nem sorrendben érkezik meg, pl. MMORPG játékok).

Amit te akarsz, az valahogy így nézne ki:
1, TCP kapcsolat nyítása az arduino felé tetszőleges porton.
2, Authentikációs adatokok küldése.
3, Arduino válaszol, hogy ok/nem ok.
4, Adatlekérő üzenet küldése.
5, Arduino válaszol.
4-5 ismételgetése, amíg megvan minden.
6, TCP kapcsolat bezárása.
(#) erdeidominik1999 válasza csatti2 hozzászólására (») Aug 31, 2015 /
 
Hú ezzel nagyon sokat segítettél, már látom is, hogy ez járható út, már csak egyet nem tudok, hogy most úgy van nekem a webszerver, hogy cookie-val van hitelesítve, hogy az app nem fog cookie-t tárolni szerintem.
(#) atus1981 válasza atus1981 hozzászólására (») Aug 31, 2015 /
 
Megoldva! Köszönöm mindenkinek a segítséget!
(#) wbt hozzászólása Aug 31, 2015 /
 
Attiny85-ös kicsi, "USB" felületű kispanelt hogyan lehet Bascom alól programozni (USB-n keresztül)? Arduino 1.0.4.-et regélnek róla meg +kis drivert, de nekem most nem Arduino alól kellene.
(#) csatti2 válasza erdeidominik1999 hozzászólására (») Aug 31, 2015 /
 
Az androidos programok számára elérhető egy egyszerűsített SQL adatbázisszerver, ami a háttérben fut (ez olyasmi szerepet tölt be, mint a registry a windowsnál). Minden program számára saját adatbázis van, egymásét nem érhetik el. Itt tárolhatod az autentikációs adatokat.
Annyi a dolgod utána, hogy minden TCP session elején autentikálod magad az arduinóval, ami a session végéig érvényes marad. Felejtsd el a cookie-kat és hasonlókat, a saját protokollodat úgy alakítod ki, ahogy te szeretnéd (pont része is lesz a védelemnek, hogy csak te tudod, hogy is működik pontosan, pl. a jelszavakat küldheted hash-elve az arduino által küldött só-val megsózva, esetleg még ugrókóddal is megbolondítva, így gyakorlatilag törhetetlen lesz, hasonló módon az adatokat is meg lehet bolondítani, így nincs man-in-the-middle támadásra sem lehetőség).
A hozzászólás módosítva: Aug 31, 2015
(#) erdeidominik1999 válasza csatti2 hozzászólására (») Aug 31, 2015 /
 
Ez tiszta sor, de hogyan csináljam akkor a hitelesítést? Milyen formában, ha nem cookie?
(#) erdeidominik1999 válasza erdeidominik1999 hozzászólására (») Aug 31, 2015 /
 
Na szenvedtem vele egy kicsit, és végül arra jutottam, hogy az a legegyszerűbb, ha futtatok az arduin még egy web klienst, egy máik porton, és az nem kér hitelesítést, erre az appal postal elküldöm a kérést, és xml-ben válaszol. De ha van egyszerű jobb ötlet, nyitott vagyok rá.
(#) csatti2 válasza erdeidominik1999 hozzászólására (») Szept 1, 2015 /
 
Ebből a hozzászólásból látom, hogy jobb ha inkább úgy rakod össze, ahogy eddig. Sajna az alapfogalmak ismerete nélkül vajmi kevés esélyed van arra, hogy saját megoldást készíts.
(#) erdeidominik1999 válasza csatti2 hozzászólására (») Szept 1, 2015 /
 
Mindenképpen az app editornál akarok maradni, mert saját magam nem tudom megírni a programot java-ban, viszont ott meg elég korlátoltak a lehetőségek, most úgy tűnik, hogy ez a megoldás működik, és nekem is szimpi, most úgy van, hogy az app küld egy kérést az ardunak, posttal, amiben benne van hitelesítés pl. "1234&get_settings" az 1234 a jelszó, és utána a kérés, ha az ardu csak a kérést kapja, jelszót előtte nem, akkor egy hibás jelszó xml-t küld vissza, ha megkapja a "jelszó&kérést", akkor elküldi a kért adatokat xml-ben.
(#) misi93 hozzászólása Szept 1, 2015 /
 
Sziasztok. Egy kis segítséget szeretnék kérni. Van egy ilyen kis kijelzőm , de nem tudom működésre bírni. Neten nézegettem hogyan lehetne elinditani, de sehogy nem jön össze. arduino uno-val probálkozok jól rátölti a kis példaprogit, soros porton ki is ír "dolgokat a kijelzőről" de ennyi a kijelző nem jelenit meg semmi háttérvilágítás megy. Lehet nem tett neki jót az 5v (remélem nem ez a baja). Próbáltam úgy is hogy külön micro sd olvasóval képet kiirattam, de semmi.
A segítséget köszönöm

Szerk.: a program amit rátöltöttem illetve az sd kártya kép is ott van (ez)
A hozzászólás módosítva: Szept 1, 2015

Névtelen.jpg
    
(#) icserny válasza misi93 hozzászólására (») Szept 1, 2015 /
 
Én inkább ezt a leírást választottam volna. Az általad letöltött program szerintem más típusú kijelzőhöz való.
(#) misi93 válasza icserny hozzászólására (») Szept 1, 2015 /
 
Ezzel is próbáltam, mert a könyvtára ugyanaz mind a 2 öt kipróbáltam az ILI9340/41 et is, de semmi változás ugyan úgy fehér a kijelző.
(#) arduinoforever válasza misi93 hozzászólására (») Szept 1, 2015 /
 
Szia!
5V nem teszi tönkre, de nem ad képet sem vele!
3.3V-os panelről tökéletesen fut. Próbáld Arduino pro minivel és 3.3V-ról futtatva, vagy UNO-hoz szintilleszteni kell, de az Nekem nem mindig működött!
(#) Kovidivi válasza arduinoforever hozzászólására (») Szept 1, 2015 /
 
Arduino UNO-nak is adhatsz 3.3V-ot, ha találsz valahol. Mondjuk 16MHz-en... Bár sok Arduino mini pro-t láttam ugyanígy 3V3-tal, 16MHz-cel. Ha instabil lesz valami, akkor ez az oka. Át lehet külső programozóval lökni 8MHz-re, vagy ha jól tudom, programból is be lehet állítani a 8-as osztást (CKDIV), vagy más értéket. Ez már kicsit Arduinon-kívüli téma.
(#) TavIR-AVR válasza misi93 hozzászólására (») Szept 2, 2015 /
 
A ChipID-t kellene kiolvasni. Az megmondja, hogy melyik videochip van rajta...
Mert ezek 4-5 félével is készülnek
(#) kvic hozzászólása Szept 2, 2015 /
 
Szerintetek ezt hogyan lehetne összehozni minél kevesebb és kisebb elemből egyetlen IO port felhasználásával: 4 LED (2 fehér + 2 piros) = első-hátsó lámpa vezérlése, féklámpa funkcióval, 1:87-es autómodellben.
- 0V esetén nem világít semmi.
- ~1.7V-ra világítson mind a 4 (lámpa funkció)
- ~2.5V-ra 2 piros erősebben világítson, 2 fehér pedig a korábbi állapotnak megfelelően (ha előtte 1.7V volt, akkor világítson, ha 0V volt, akkor meg ne). Ez lenne a féklámpa funkció.

Ami adott: Adafruit Trinket 3.3V, 3.7V Li-Po akksi, nagyon kicsi méret

Arra gondoltam, hogy a piros ledek mehetnek közvetlenül az IO portról, a fenti 1.7-2.5V esetén, a fehérek meg tranzisztoron keresztül kapják a kakaót, viszont hogyan érem el a memória funkciót egyszerű áramköri elemekből (és minél kevesebből a nagyon korlátozott hely miatt) amivel vezérelhetem a tranzisztort, mert az előző állapotot valahogy el kell tároljam... Vagy rossz nyomon vagyok?
(#) varttina válasza kvic hozzászólására (») Szept 2, 2015 /
 
Ekkora méretarányban szerintem bőven elég ha 5-10 mA-rel hajtod a LED-eket, szóval nem kell tranzisztor. Némelyik LED ilyen csekély áram esetén is vakítóan fényes tud lenni. Az előző állapotot eltárolhatod egy változóban. Ha a változót elmented az EEPROM-ba egy esetleges áramkimaradás után is emlékezni fog az előző állapotra.
(#) kvic válasza varttina hozzászólására (») Szept 2, 2015 /
 
Sajnos a változóban tárolás nem okés, mert én programból mondjuk 2.5V-ot adok a portra, akkor
a.) csak a piros ledek világítanak (ha előtte 0V volt a porton) = féklámpa
b.) fehér+piros ledek is világítanak (ha előtte 1.7V-ot adtam a portra) = világítás + féklámpa

Hogyan tudom megkülönböztetni a két esetet?
Ezt a 4 esetet kell kezelnem egyetlen IO porttal:
1. egyik led sem világít
2. mind a 4 led világít (világítás)
3. mind a 4 led világít, pirosak erősebben mint előbb (világítás + féklámpa)
4. csak a pirosak világítanak, erősségük mint 3. pontban. (csak féklámpa)
A hozzászólás módosítva: Szept 2, 2015
(#) Kovidivi válasza kvic hozzászólására (») Szept 2, 2015 /
 
Az én ötletem: A piros és fehér LED-eket ellenpárhuzamba kötni, ha 1 PIN-ed van, akkor a másik láb féltápfeszültségre, ekkor a tápnak nagyobbnak kell lennie mint a két LED nyitofeszültsége összesen, vagy ha két PIN-ed van, akkor ezekre kell a két ellenpárh. LED-et kapcsolni. Fényerösség nem gond. Változót használj. Miért ne lehetne?
Vagy te úgy akarod, hogy van egy vezérlőd, ami ezeket a feszültségeket adja ki, és erre kell reagálnod? Akkor rakj be egy 8lábú Attiny-t, aminek van ADC-je, és akkor lesz szabad lábad jó sok.
(#) kvic válasza Kovidivi hozzászólására (») Szept 2, 2015 1 /
 
Ellenpárhuzamba kötés esetén tudok olyat, hogy a fehér ne világítson erősebben, de a piros igen? Szóval világítás (4 led) és világítás féklámpával (4 led, pirosak erősebbek) megkülönböztethető legyen. Amúgy nincs külön vezérlő, csaka a Trinket, a programot meg én írom, szóval nincs kőbe vésve semmi. Ami fix, hogy erre csak 1 IO portom van, a többi foglalt + ATTiny necces, amúgy sincs sok helyem
A hozzászólás módosítva: Szept 2, 2015
(#) Kovidivi válasza kvic hozzászólására (») Szept 2, 2015 /
 
Hol van 1 IO lábad, és honnan kapsz 2.5V, 1.7V-ot, most van DAC-od? Mi fogja ezt a feszültséget feldolgozni? Oda ADC kell. Legalább egy skiccet dobjál már össze. Szerezz valahonnan még egy IO lábat, és kész is vagy.
A hozzászólás módosítva: Szept 2, 2015
(#) kvic válasza Kovidivi hozzászólására (») Szept 2, 2015 /
 
A mikrokontrollerem egy Trinket , ennek egyetlen GPIO lába szabad, PWM outputot használok, szóval nincs DAC-om. Nincs még 1 IO lábam, mivel a másik 4 foglalt már.
Következő: »»   148 / 863
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem