Termometr z VFD

Wzmacniacze, zasilacze itd. Schematy, parametry, konstrukcje...

Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp

traxman

Termometr z VFD

Post autor: traxman »

Ciepło się zrobiło, projekt prawie lampowy - termometr na IWuszkach 11, ładnych i dużych. Miałem ostatni procesor ATTINY26 w DIP-ie, to znalazłem sposób na wykorzystanie.
Schemat:
VFD_remo_SCH.png
Układ zasilany z 12VAC, po powieleniu x2 zasila VFD, po stabilizacji +5V procesor i okolice, a przetwornica obniżająca do zasilania grzejników. Dwa wzmacniacze dopasowują sygnał z przetworników temperatury LM35, pstryczek podłaczony do J2 wybiera kanał pomiarowy.
Program:
VFD_termo_hex.pdf
Zegar wewnętrzny 1MHz, zmienić rozszerzenie na *.hex bo nie da się wczytać....
Układ jest daleki od optymalnego, ale nie chciało mi się specjalnie myśleć (ciepło jest).
A tak wygląda:
VFD_.jpg
Miłej zabawy.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
cirrostrato
6250...9374 posty
6250...9374 posty
Posty: 6340
Rejestracja: sob, 5 listopada 2005, 15:51
Lokalizacja: Warszawa

Re: Termometr z VFD

Post autor: cirrostrato »

Adamie, miła zabawka, zapas VFD mam, jakby co numitrony też są........a za miesiąc pierwszy wnuk , dla niego te zabawki zbieram, emigruje na stałe.....................boli. Pozdrawiam.
traxman

Re: Termometr z VFD

Post autor: traxman »

Trochę teraz mało czasu, ale to jeden z elementów lampowej stacji meteo, planuje dorobić jeszcze miernik wilgotności i miernik ciśnienia ze wskaźnikami na EM800 (pasek w identycznym kolorze) oraz wskaźnik komfortu na EM84...
Awatar użytkownika
Tomasz Gumny
1875...2499 postów
1875...2499 postów
Posty: 2302
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Termometr z VFD

Post autor: Tomasz Gumny »

Może trochę nie na temat, ale jak się mierzyło temperaturę przed termistorami? Pomijając termostaty bimetalowe i rtęciowe...
Tomek
traxman

Re: Termometr z VFD

Post autor: traxman »

Termometry metalowe, wykorzystujące zmiany rezystancji przewodnika pod wpływem temperatury - do dzisiaj funkcjonujące PT100, PT1000. Nie było też potrzeby przetwarzania T/U, do regulacji wykorzystywano regulatory bezpośrednie.
traxman

Re: Termometr z VFD

Post autor: traxman »

Na życzenie kolegi... kod (CVAVR, Powinno dać się przerobić i skompilować w wersji demo)

Kod: Zaznacz cały

// traxman TermVFD

#include <tiny26.h>
#include <delay.h>

// Ksztalty znakow 0-9,[ ],- A-Px0..DP-Px7, DP zgaszony
flash unsigned char disp_char[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};

#define SW PINB.3

// Bufor wyswietlacza [tys,set,dzies,jedn]
unsigned int disp_buf[3]={0xFF,0xFF,0xFF};	
// Wartosc ADC napiecia biezaca
unsigned int ADC_val=0;
// Dzielnik odswiezania AD T0/sel
unsigned int AD_div=0;
// jasnoťŠ wyťwietlacza
unsigned int i=2, j=20; //i zw-oka ms w cyklu wyswietlacza SEGZ>G, j czas G
// Konwersja BIN->BCD {0..999}
void bin2bcd1k(unsigned int bin){
unsigned int a,b;
disp_buf[0]=  bin/100;	 a= 100*disp_buf[0];
disp_buf[1]= (bin-a)/10; b=  10*disp_buf[1];
disp_buf[2]=  bin-a-b;	
}

// Przeglad wyswietlacza z wygaszniem zer nieznaczacych + konwersja BCD
interrupt [TIM0_OVF] void timer0_overflow(void){            
TCNT0=0xF7;					// Licznik T0 3906Hz/9 (256-(18/2)) TC0 na ok 434Hz     

if (SW) ADMUX=0x88; 
 else ADMUX=0x89;


if (AD_div>400){
  AD_div=0; 
  ADCSR=0xC7;					// Rozpoczecie konwersji AD, CK/128, bez przerwan
  while (ADCSR & 0x40) {}			// Czekaj na koniec konwersji
  ADC_val=(ADCL+(ADCH*256))/2;}			// Odczyt wyniku z przeliczeniem na 51.5'C

bin2bcd1k(ADC_val);				// Konwersja BIN->BCD {0..999}   

if (disp_buf[0]==0) {PORTB.0=1; delay_ms(i+j+i);} // Wygaszenie zera nieznaczacego setek
  else {PORTA=disp_char[disp_buf[0]];delay_ms(i);PORTB.2=0;delay_ms(j);PORTB.2=1;delay_ms(i);PORTA=0xFF;}

PORTA=disp_char[disp_buf[1]] & 0x7F;delay_ms(i);PORTB.1=0;delay_ms(j);PORTB.1=1;delay_ms(i);PORTA=0xFF;        //przeicinek 51.1'C

PORTA=disp_char[disp_buf[2]];delay_ms(i);PORTB.0=0;delay_ms(j);PORTB.0=1;delay_ms(i);PORTA=0xFF;

++AD_div;                            		// Zwiekszenie dzielnika
#asm("WDR");					// Kasowanie Watchdoga
}

void main(void)    
{
#asm("WDR");		       	// Kasowanie Watchdoga
WDTCR=0x0F;		       	// Zalaczenie Watchdoga z cyklem 16ms
ACSR=0x80;	  	       	// Wylaczenie Komparatora Analogowego
ADMUX=0x88;			// Wybor Vref=2.56 Int, Temp_In=ADC8 Obciecie wyniku do 8bitow, ADLAR=1, wynik w ADCH	
ADCSR=0x87;			// Ustawienie AD, CK/128, bez przerwan
PORTA=0xFF;DDRA=0xFF;		// Segmenty wyswietlacza PB0..7 A..H,DP                                                                     
PORTB=0x0F;DDRB=0x07;   	// Sterowanie Anodami PA0..2 AN1..3                0x07

PORTA=0x00;delay_ms(2);    	// Test segmentˇw, wszystkie za-aczone
PORTB.0=0; PORTB.1=0; PORTB.2=0;//Załączenie siatek
delay_ms(500);
PORTB.0=1; PORTB.1=1; PORTB.2=1; //Wyłączenie siatek
PORTA=0xFF;                     // Wyłączenie wyswietlacza

TCCR0=0x04;   			// Presc /256 = 3906Hz CS2=1,CS1=0,CS0=0
TCNT0=0xF7;			// Licznik T0 3906Hz/9 (256-(18/2)) TC0 na ok 434Hz
TIFR=0x00;			// Kasowanie przerwan licznikow
TIMSK=0x02;			// Zezwolenie na przerwanie Licznika T0
GIFR=0x00;			// Kasowanie flag przerwan zewnetrznych
GIMSK=0x00;			// Zablokowanie przerwan zewnetrznych
MCUCR=0x00;			// Zablokowanie przerwan, i trybu sleep
#asm("WDR");			// Kasowanie Watchdoga
#asm("SEI");			// Odblokowanie przerwan

while (1);			// Pomiar i wyswietlanie w przerwaniu T0 w przerwaniu, 
}