Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor - termometru cu tiny2313


Vizitator caif

Postări Recomandate

Vizitator caif

am facut un motaj cu un termometru l-am modificat in sensul ca in loc de afisaj cu anod am pus cu catrod comun plus niste componente in plus pt controlul anumitor functii ceea ce nu inteleg eu este urmatorul lucru: am programat uC l-am pus nu arata ce trebuie si in plus regulatorul de tensiune se incalzeste prea puternic de parca ar fi in scurt ceva si asta se intampla doart cand pun uC in care e sc softul daca pun unul care nu are nici o treaba e ok si inca ceva daca imi puteti sugera cam ce modificari trebuie facute in cazul treceri de la un at90s2313 la un attiny2313 in cadrul programari

schema de laacre am pornit fiind http://www.kmitl.ac.th/~kswichit%20/avr ... hermo.html

Link spre comentariu
  • Răspunsuri 7
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • bogdan_

    2

  • cristianp

    2

  • Laci

    1

Zile populare

Top autori în acest subiect

daca nu ai modificat cum trebuie schema si SOFTUL, atunci probabil la tine se va aprinde exact ce nu trebuie sa se aprinda in schema originala. adica in loc sa se aprinda doar un digit o data se aprind de fapt exact ceilalti 3 etc....pune schema!

Link spre comentariu

da, trebuie modificat softul. pentru ca exact cum am spus, la tine se selecteaza cate 3 digiti o data.inainte, pe pinii de control ai anozilor comuni se scotea 0 pentru digitul care trebuia selectat, acum trebuie sa scoti 1. la fel si pentru controlul ledurilor. inainte se scotea 0 pentru led aprins, acum trebuie sa scoti 1 pentru led aprins. te descurci sa modifici singur softul?

Link spre comentariu
Vizitator caif

R1-R7 sunt de 220 da si intre uC si tran este acea rez de limitare dar am omiso cand am facut schema referitor la soft e cam greu tinand cont ca sunt un incepator mi-ar prinde bine putin ajutor

/**************************************

thermo.c

Digital Thermometer -55C to +125C

AVR 90S2313 & DS1820

 

Copyright 2001 by Wichit Sirichote

 

**************************************/

 

#include <90s2313.h>

#include

 

 

// 1 Wire Bus functions

#asm

.equ __w1_port=0x12

.equ __w1_bit=6

#endasm

#include <1wire.h>

 

// DS1820 temperature sensor functions

#include

 

// Declare your global variables here

 

unsigned char tick,i,digit;

unsigned char heat[4];

unsigned int xtimer1;

int temp,T,X1,X2,X3,X4,X5; // signed number for negative and positve temperature manipulating

 

char key;

 

unsigned char convert[10] = {0x3F,0x06,0xdb,0xcf,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 

#define segment PORTB

#define LED_digit PORTD

 

 

// converts 16-bit data in T to display buffer for both negative and positive reading

 

void heatToBuffer()

{

if(T<0){

heat[3] = 0x40; // if negative, put -

heat[0] = 0x39; // C

 

T = abs(T); // get only amplitude

heat[1] = convert[T%10];

heat[2] = convert[T/10];

if (heat[2] == 0x3f)

heat[2] = 0; // off msd

}

else

{

heat[0] = 0x39; // C

 

heat[3] = convert[T/100];

temp = T%100;

heat[1] = convert[temp%10];

heat[2] = convert[temp/10];

// off msd

if (heat[3] == 0x3f)

{

heat[3] = 0;

if(heat[2] == 0x3f)

heat[2] = 0;

}

}

}

 

 

LPF() // performs five-point moving average

{

X5=X4;

X4=X3;

X3=X2;

X2=X1;

X1= T;

T = (X1+X2+X3+X4+X5)/5;

}

 

 

read_temp()

{

if(++xtimer1 >=5)

{

xtimer1 = 0;

segment = 0xff;

T = ds1820_temperature_10(0)/10; // read DS1820 every 5 sec.

LPF(); // enter filter

heatToBuffer(); // convert it

}

}

 

// Timer 0 overflow interrupt service routine

// timer interrupt every 1/15 sec provides foreground task to be run periodically.

 

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

switch (++tick){

case 15: tick = 0;

read_temp(); //second_task();

}

 

}

 

void scanLED() /* scan 4-digit LED and 4-key switch, if key pressed key = 0-3

else key = -1 */

// adapted from 89C2051 project if needs scan key, find one bit input port

{

char i;

digit = 0x20;

key = -1;

for( i = 0; i < 4; i++) /* 4-DIGIT scanning */

{

LED_digit = ~digit; /* send complement[digit] */

segment = ~heat; /* send complement[segment] */

delay_ms(1); /* delay a while */

segment = 0xff; /* off LED */

// if ((PORTD & 0x10) == 0) /* if key pressed P3.4 became low */

// key = i; /* save key position to key variable */

digit>>=1; /* next digit */

}

}

 

void main(void)

{

 

DDRB=0xFF;

PORTB=0x00;

 

DDRD=0x7F;

PORTD=0x00;

 

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 3.906 kHz

// Mode: Output Compare

// OC0 output: Disconnected

TCCR0=0x05;

TCNT0=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x02;

 

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

 

// 1 Wire Bus initialization

w1_init();

 

// Global enable interrupts

#asm("sei")

 

// 1 Wire Bus initialization

w1_init();

 

T = 34;

heatToBuffer();

 

while (1)

{

scanLED(); // run background task forever

}

}

Link spre comentariu

trebuie in primul rand sa mdifici procedura de afisare scanLED, este pentru afisaj cu anod comun. Mai jos ai procedura modificata

 

 

void scanLED()

{

char i;

digit = 0x20;

for( i = 0; i < 4; i++) /* 4-DIGIT scanning */

{

LED_digit = digit; /* send [digit] */

segment = heat; /* send [segment] */

delay_ms(1); /* delay a while */

segment = 0x00; /* off LED */

// if ((PORTD & 0x10) == 0) /* if key pressed P3.4 became low */

// key = i; /* save key position to key variable */

digit>>=1; /* next digit */

}

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări