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:
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:
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:
Miłej zabawy.
Termometr z VFD
Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp
Termometr z VFD
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- 6250...9374 posty
- Posty: 6340
- Rejestracja: sob, 5 listopada 2005, 15:51
- Lokalizacja: Warszawa
Re: Termometr z VFD
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.
Re: Termometr z VFD
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...
-
- 1875...2499 postów
- Posty: 2302
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
Re: Termometr z VFD
Może trochę nie na temat, ale jak się mierzyło temperaturę przed termistorami? Pomijając termostaty bimetalowe i rtęciowe...
Tomek
Re: Termometr z VFD
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.
Re: Termometr z VFD
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,
}