Fjärrstyra portabel aircond

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Fjärrstyra portabel aircond

Inlägg av sommarlov »

Jag köpte för ett par år sedan en portabel aircondition av märket KCC, inget märkligt med fungerar bra för mig.
2019-04-28 10.53.32.jpg
Sedan inköpet har jag byggt ut mitt hem med en massa iotprylar, och nu tänkte jag ta och fjärrstyra aircond, tex sätta på den automatiskt när man åker från jobbet om det är mer än 25c i huset eller ngt sådant. Jag har i huvudet lösningen på det, en esp8266 (som alltid i mina projekt) och en transistor ändra till/från state. Det borde fungera.
Men nu till min fundering, det hade ju varit häftigt att läsa av aktuell status på de dioder som finns på displayen, och skicka dem till OpenHab. Inte för att det kanske behövs, men för att jag kan ;-)
Men då esp8266 har så få GPIO:er så funderar jag på hur man kan lösa detta. Vid en genomgång av kretskortet finns det en cpu (HMS87C1204) som styr (via en SN74HC164) de lysdioder som finns på kortet. Detta görs i som jag förstår det 2 cykler; en cykel för att styra led:sen till vänster, och en cykel för att styra 2x7 segment displayen till höger.
2019-04-28 10.54.50.jpg
Hur hade ni löst detta? Jag funderar på att gå via en MCP23017 (16 I/O i2c expander) och trigga på de "cykel-bestämmar-pinnarna" på cpu för att förstå vilken cykel man är i, och sen vilka leds / segment som är tända.
Eller finns det en enklare approach? Tacksam för funderingar.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
ToPNoTCH
Inlägg: 4883
Blev medlem: 21 december 2009, 17:59:48

Re: Fjärrstyra portabel aircond

Inlägg av ToPNoTCH »

Du borde klara dig utan expander.

Din ESP borde hinna med att läsa av de seriella bitarna som går till skiftregistret (med hjälp av CLK)

Det jag inte begriper är hur den kastar om så att skiftregistret växlar mellan att vara anslutet till LED och 7 segment (dina så kallade cykler).

Är du säker på att du tolkat lösningen rätt ?

Driva två 7 segmentare med 8 bitar låter inte rätt ?
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

ToPNoTCH skrev:Det jag inte begriper är hur den kastar om så att skiftregistret växlar mellan att vara anslutet till LED och 7 segment (dina så kallade cykler).

Är du säker på att du tolkat lösningen rätt ?

Driva två 7 segmentare med 8 bitar låter inte rätt ?
Jag är inte 100%, men det är det enda jag kan se kan fungera. DP1+DP2 för att välja vilken av 7-segmentarna som är aktiv drivs av 2 portar på cpu, samma med "vcc" för leddarna. Jag tror nu (tänkte på det när jag låg och försökte sova igårkväll) att till och med avkänningen av vilken pushbutton som trycks görs på samma sätt, dvs ena sidan på tryckknappen är "vcc" och sen cyklas hög/låg signal igenom på 164:an för att gå till gnd om en knapp är nertryckt. Jag kan inte se en annan lösning när jag traceat ut kortet.
Användarvisningsbild
LaRdA
EF Sponsor
Inlägg: 3754
Blev medlem: 9 september 2003, 14:10:46
Ort: Jämtland

Re: Fjärrstyra portabel aircond

Inlägg av LaRdA »

Jag funderar på om man kan lösa det enklare genom att lura den inbyggda temp-sensorn med din ESP.
Dvs koppla in ett motstånd så att AC'n tror att temperaturen är mycket lägre än i verkligheten, och att den då inte startar för än ESP' kopplar ur motståndet och givaren ger rätt temp.
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

Gjort lite mer grävning och jag tror med säkerhet att jag förstår nu.
Så detta är pinnarna på cpu:n som jag mappat upp, och det som är intressant är 17-20 som i tur och ordning är BTN, okänt, DP1 samt DP2.
2019-05-02 20.59.17.jpg
Tittar man på sen på pulseview (jag såg att jag hade nog i all hast bytt namn på clk och serial in) ser man att DP1 och DP2 hela tiden matas med värden, och när man trycker på ngn knapp dyker det upp pulser på den pinnen på cpu:n.
pulseview_2019-05-02_21-00-05.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

Så jag har tagit mig längre i detta projekt, har ett POC nu. Men jag har en fråga som ngn kanske kan hjälpa mig med.
Vad jag har är min Air condition cpu som har 5v signal ut, och denna drar jag via en transistor för att på ner signalen till +3.3v så jag kan ta in den safe till min ESP8266.
ShareX_2019-05-19_22-40-38.png
Detta fungerar, men när jag tittat på signalen mha mitt oskilloskop ser jag att signalen går mellan 3.3 och 0, men med lite spikar upp till 5v. Hur får jag bort spikarna?
2019-05-19 16.59.16.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Fjärrstyra portabel aircond

Inlägg av arvidb »

En liten (runt 100 pF - 0,1 µF) kondensator mellan GND och kollektor?

Eller koppla transistorn annorlunda: ingången till bas (via lämplig resistor förstås) och emitter till GND. Då blir visserligen signalen inverterad men det borde du kunna hantera i mjukvaran?
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

arvidb skrev:En liten (runt 100 pF - 0,1 µF) kondensator mellan GND och kollektor?
Jag provar det. Tack!
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

10nF gjorde susen. Tack!
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Fjärrstyra portabel aircond

Inlägg av arvidb »

Härligt! :tumupp:
Användarvisningsbild
sommarlov
Inlägg: 532
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: Fjärrstyra portabel aircond

Inlägg av sommarlov »

Nu är detta projekt klart och fungerar klockrent. Skall integrera air condition till min OpenHab i nästa steg.
Men för att sammanfatta, jag hade en gammal portabel air condition som inte hade någon koppling till resten av mina iot devices så jag började glad i hågen att demontera ac:n för att fixa det. Det som började med att kunna trycka på de 4 knappar på fronten för att bara slå av och på och styra temp etc växte till att även läsa av statusen på displayen (leds + 7 segment display, se bild ovan) vilket gjorde att det drog ut på tiden.

På air condition mb sitter en HMS87C1204 cpu (oxo bilder ovan) som via en SN74HC164 styr allt, dvs leds + 7-segment + känner av knapptryckningarna. Efter fundering och tips i tråden, gjorde jag så att jag låter min ESP8266 läsa av CLK+Serial data (se bild ovan) på SN74HC164 samt lite andra portar på cpu:n för att se vad som just nu styrs, och sen översatte det till variabler i mitt program som jag sen skickar till min MQTT server (vilken jag även kan skicka IN signaler från tex OpenHab till mitt program och styra aircond).
Bifogar min interrupt kod för CLK, DP1 samt DP2 för de vetvilliga:

Kod: Markera allt

void handle_interrupt_dp1() ICACHE_RAM_ATTR;
void handle_interrupt_dp2() ICACHE_RAM_ATTR;
void handle_interrupt_clk() ICACHE_RAM_ATTR;

void handle_interrupt_dp1() {
	if (last_known_is_powered_on && current_dp1_value != current_complete_value && current_complete_value != 255) {
		current_dp1_value = current_complete_value & 0b11101111;
		dp1_is_error_waiting_for_dp2 = current_dp1_value == seven_digit_error;
		dp_value_changed = true;
	}
	current_complete_value = 255;
}

void handle_interrupt_dp2() {
	if (last_known_is_powered_on && current_dp2_value != current_complete_value && current_complete_value != 255) {
		current_dp2_value = current_complete_value & 0b11101111;
		current_error_value = dp1_is_error_waiting_for_dp2 && current_complete_value != 255 ? current_dp2_value : 255;
		dp1_is_error_waiting_for_dp2 = false;
		dp_value_changed = true;
	}
	current_complete_value = 255;
}


// Pattern:
// Header 255 + sync 254 for 3550uS
// dp1 high + dp2 high - Led status byte for 3550uS
// dp1 low  + dp2 high - DP1 byte for 3550uS
// dp1 high + dp2 low  - DP2 byte for 3550uS
void handle_interrupt_clk() {
	current_micros = micros();

	// Long time between packages, meaning dp1 and dp2 haven't picked the values up
	if (current_micros - last_micros_clk_interrupt > 2000) {
		// Ignore the header and sync value
		if (last_known_is_powered_on && current_complete_value != 255 && current_complete_value != 254) {
			// Ignore last bit
			current_complete_value &= 0b11111110;
			if (current_complete_value != current_led_value) {
				previous_led_value = current_led_value;
				current_led_value = current_complete_value;
				led_value_changed = true;
			}
		}

		current_serial_value = 0;
		current_serial_value_index = 0;
	}

	last_micros_clk_interrupt = current_micros;

	if (digitalRead(PIN_SERIAL) == HIGH) {
		current_serial_value |= 1 << current_serial_value_index;
	}
	current_serial_value_index++;

	if (current_serial_value_index >= 8) {
		// New data package
		current_complete_value = current_serial_value;
		if (current_complete_value == 255) {
			nb_of_255_bytes++;
		}
		nb_of_read_bytes++;

		current_serial_value = 0;
		current_serial_value_index = 0;
	}
}
Iom att signalerna kommer in efter en med 3.5ms mellanrum, blir det mycket state-machine av lösningen så det blev till att hålla tungan rätt i mun.


Uppkopplad i test mode på bänken, cpu på mb krävde vattennivåsmätaren och tempgivare att vara inkopplad.
2019-05-12 20.25.45.jpg
Min design.
Schematic_KCC_Aircon_20190525.png
Som vanligt lär jag mig mer och mer för varje projekt jag gör, det är väl slutmålet?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar