Ad
Energibutiken.se smarta varor på nätet, leverans till dörren
Besök oss idag
Annonsera i Värmepumpsforum, klicka här för att ställa e-postfråga och få mer info.
140x140vpforum-11.gif
kontakta oss för pris!

Skriv svar

Varning: Det har inte skrivits nya inlägg i detta ämne på 50 dagar.
Om du inte är säker på att du faktiskt vill svara i det här ämnet, så bör du överväga att istället starta ett nytt ämne.
Namn:
E-post:
Ämne:
Inläggsikon:

Verifiering:
This box must be left blank:

Skriv in bokstäverna som syns på bilden
Lyssna på bokstäverna muntligt / Begär en ny bild

Skriv in bokstäverna som syns på bilden:
Skriv in de tre sista bokstäverna i alfabetet:
Hur många var de älva dragspelarna (siffror):

För att slippa svara på kontrollfrågor, registrera dig här!


Ämnessammanfattning

Skrivet av: bopakoster
« skrivet: 01 november 2013, 14:38:25 »

Såja, då är min RG20-display klar...  Så här ser den ut.  Om någon är intresserad av en liknande display (antingen byggsats, bara programmerad PIC-processor eller färdigbyggd) så maila mig på mail@ridax.se.
Den visar aktuell temperatur och blinkar med vissa intervaller till med inställd temperatur.  När man snurrar på ratten, så växlar den över till att visa inställd temperatur ett tag.

Jag garanterar inte att den visar rätt hela tiden än, måste kanske trimma in "resistanskurvorna" lite, men det är i så fall bara en enkel ombränning av PICen.
Fortfarande möjligt?
Skrivet av: Rdx
« skrivet: 01 november 2013, 13:32:59 »

Här är PIC 16F688-koden

/*

Compiling instructions:  Go into Project->Build options->Project and check
Global->MPLAB ICD and PICC Linker command from .COF to .HEX

13mm borr

16F688 Pin assignments

   +5/3.3V      1      14   GND
         D1- 2      13   Temp-setting input AN0
         B   3      12   G
                4      11   Room-temp input AN2
         C   5      10   A
         E   6      9   F
         D   7      8   D2-

Supply voltage 4,7V each step 4,7/1024 = 0,00458984375
Minimum 5deg  0.28V = 54 AD-value
Maximum 30deg 4.36V = 950 AD-value

Room temp
Volt      Degree
2,64      10,0
2,44      14,5
2,15      20,5
1,78      27,5
1,73      29,0
1,72      29,5
1,60      32,5

Konstant   1V = 21,875
3,10      00,0
1,50      35,0

67,8125 - k * V

*/

#define _16F688
#include <pic.h>
#include <string.h>
#define RUM_KOMP -3

 __CONFIG(CP_ON & MCLRE_OFF & PWRTE_ON & WDTE_OFF & FOSC_INTOSCIO & BOREN_OFF & FCMEN_OFF & IESO_OFF);
// __CONFIG(PROTECT & MCLRDIS & PWRTEN & WDTDIS & INTIO & BORDIS & FCMDIS & IESODIS & RCIO);

#define MS_count 10               // 1000000/4/256/10 = 100 Hz
static bit DISP_A   @ ((unsigned)&PORTC*8+0);   // Display segment A
static bit DISP_B   @ ((unsigned)&PORTA*8+4);   // Display segment B
static bit DISP_C   @ ((unsigned)&PORTC*8+5);   // Display segment C
static bit DISP_D   @ ((unsigned)&PORTC*8+3);   // Display segment D
static bit DISP_E   @ ((unsigned)&PORTC*8+4);   // Display segment E
static bit DISP_F   @ ((unsigned)&PORTC*8+1);   // Display segment F
static bit DISP_G   @ ((unsigned)&PORTA*8+1);   // Display segment G
static bit DISP_D1  @ ((unsigned)&PORTA*8+5);   // Display cathode 1
static bit DISP_D2  @ ((unsigned)&PORTC*8+2);   // Display cathode 2
static bit TEMP_SET @ ((unsigned)&PORTA*8+0);   // Temp setting input
static bit TEMP_CUR @ ((unsigned)&PORTA*8+2);   // Temp current input


volatile static char dispValue = 0;
bit firstDisp;


static void dispDigit(char d) {
   switch(d) {
      case 0 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 1;
         DISP_E = 1;
         DISP_F = 1;
         DISP_G = 0;
         break;
      case 1 :
         DISP_A = 0;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 0;
         DISP_E = 0;
         DISP_F = 0;
         DISP_G = 0;
         break;
      case 2 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 0;
         DISP_D = 1;
         DISP_E = 1;
         DISP_F = 0;
         DISP_G = 1;
         break;
      case 3 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 1;
         DISP_E = 0;
         DISP_F = 0;
         DISP_G = 1;
         break;
      case 4 :
         DISP_A = 0;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 0;
         DISP_E = 0;
         DISP_F = 1;
         DISP_G = 1;
         break;
      case 5 :
         DISP_A = 1;
         DISP_B = 0;
         DISP_C = 1;
         DISP_D = 1;
         DISP_E = 0;
         DISP_F = 1;
         DISP_G = 1;
         break;
      case 6 :
         DISP_A = 1;
         DISP_B = 0;
         DISP_C = 1;
         DISP_D = 1;
         DISP_E = 1;
         DISP_F = 1;
         DISP_G = 1;
         break;
      case 7 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 0;
         DISP_E = 0;
         DISP_F = 0;
         DISP_G = 0;
         break;
      case 8 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 1;
         DISP_E = 1;
         DISP_F = 1;
         DISP_G = 1;
         break;
      case 9 :
         DISP_A = 1;
         DISP_B = 1;
         DISP_C = 1;
         DISP_D = 0;
         DISP_E = 0;
         DISP_F = 1;
         DISP_G = 1;
         break;
   }
}


static void interrupt irq(void) { // Interrupt routine
   if (T0IF) { // Timer interrupt
      TMR0 -= MS_count;
      T0IF = 0;
      if (firstDisp) { // Display refresh first digit x10
         DISP_D2 = 1;
         dispDigit(dispValue / 10);
         DISP_D1 = 0;
         firstDisp = 0;
      } else { // Display refresh seond digit x1
         DISP_D1 = 1;
         dispDigit(dispValue % 10);
         DISP_D2 = 0;
         firstDisp = 1;
      }
   }
}


static unsigned int getTemp(unsigned char ansel) {
   ADCON0 = 0b10000001 + (ansel << 2);
   GO_DONE = 1;
   while (GO_DONE) {
   }
   return ((ADRESH << 8) + ADRESL);
}


static char translateSetTemp(unsigned int t) {
   if (t < 54) {
      return 5;
    } else if (t > 950) {
      return 30;
   }
   t -= 54;
   t = t * 25 + 448;
   t = t / 896;
   t += 5;
   return t;
}


static char translateRoomTemp(unsigned int t) {
   signed char r;

   r = 68 - t / 10 + RUM_KOMP;
   if (r < 0) {
      return 0;
   } else {
      return r;
   }
}


void main(void) {
   unsigned int setTemp;   
   unsigned int oldSetTemp;
   unsigned int roomTemp;
   unsigned int i;
   char       changing = 0;

   OSCCON = 0b01001010;   // 1 Mhz
   CMCON0 = 7;            // Comparators off, digital I/O
   ANSEL  = 0b00000101;   // AN0 and AN2 configured as analog input
   TRISA  = 0b00000101;
   TRISC  = 0b00000000;
   WPUA   = 0;
   OPTION_REG = 0b00000111;   // Prescaler to TMR0 1:256 (Fosc/4/64 = 3900 Hz
   INTCON = 0b10100000;   // Global int | TMR0IE
   ADCON0 = 0b10000001;
   ADCON1 = 0b00000000;   // Fosc/2 (1 Mhz)
   
   for  (;;) {
      changing = 0;
      roomTemp = translateRoomTemp(getTemp(2));
      for (i = 0; i < 2000; i++) { // 1 Mhz
         setTemp  = translateSetTemp(getTemp(0));
         if (setTemp != oldSetTemp) {
            oldSetTemp = setTemp;
            changing = 1;
            i = 1000;
         }
         if (changing) {
            dispValue = setTemp;
         } else {
            dispValue = roomTemp;
         }
      }
      for (i = 0; i < 500; i++) { // 1 Mhz
         oldSetTemp  = translateSetTemp(getTemp(0));
         dispValue = oldSetTemp;
      }
   }
}
Skrivet av: Rdx
« skrivet: 01 november 2013, 13:17:17 »

Skrivet av: bopakoster
« skrivet: 01 november 2013, 13:08:50 »

Tack för länken Carl N! har PM-at DIY-freak.
Skrivet av: Carl N
« skrivet: 01 november 2013, 12:50:27 »

Skrivet av: bopakoster
« skrivet: 01 november 2013, 11:31:24 »

Bra idé  tummenupp,
bortsett från att jag måste gå ner och knappa fram rätt menybilder, dom ligger inte kvar permanent.
Skrivet av: purjo__
« skrivet: 01 november 2013, 11:28:01 »

Sätt fast en IP-kamera så att den filmar displayen och häng en bättre begagnad mobil eller billig surfplatta på väggen uppe.  tummenupp
Skrivet av: bopakoster
« skrivet: 01 november 2013, 11:18:20 »

Kan man hitta någon sådan som funkar istället för RG20?
Vill ha nåt som visar aktuell temperatur och inställt börvärde på rumstemp så  man slipper springa ner i källaren för att se vad som givaren står på.

Annonser

Right Block

Vibrationsdämpare
Besök vår webshop, klicka här!
Energioffert.se
Energibutiken.se smarta varor på nätet, leverans till dörren
luftvärmepumpar, tillbehör, installationsmaterial, vi har allt!
Annonspriser

Online just nu!

Ad
Energibutiken.se smarta varor på nätet, leverans till dörren
Besök oss idag
Annonsera i Värmepumpsforum, klicka här för att ställa e-postfråga och få mer info.
140x140vpforum-11.gif
kontakta oss för pris!