Witam,
złożyłem płytkę, napisałem kod i coś nie działa, narazie podam kod bo płytka śmiga byłbym wdzięczny za sugestie co jest nie tak że to nie chce działać, kod zbudowany po części w CodevisionAVR.
Wyświetlacz jest na wspólnej Katodzie stąd mój wniosek że aby zaświecić jakiś segment muszę wysłać 0 na pin, a aby go zgasić 1. Jeżeli źle myślę to poprawcie mnie.
Dzięki i Pozdro.
złożyłem płytkę, napisałem kod i coś nie działa, narazie podam kod bo płytka śmiga byłbym wdzięczny za sugestie co jest nie tak że to nie chce działać, kod zbudowany po części w CodevisionAVR.
Wyświetlacz jest na wspólnej Katodzie stąd mój wniosek że aby zaświecić jakiś segment muszę wysłać 0 na pin, a aby go zgasić 1. Jeżeli źle myślę to poprawcie mnie.
#include <mega162.h>
#include <1wire.h>
#include <math.h>
#include <ds18b20.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x07 ;PORTE
.equ __w1_bit=1
#endasm
int btos (int f)
{
int fg=0;
switch(f){
case 0: fg=11000000;
break;
case 1: fg=11111100;
break;
case 2: fg=10010101;
break;
case 3: fg=10011000;
break;
case 4: fg=10101011;
break;
case 5: fg=10001001;
break;
case 6: fg=10000001;
break;
case 7: fg=11011100;
break;
case 8: fg=10000000;
break;
case 9: fg=10001000;
break;
default: fg=00000000;
break;
}
return fg;
}
int ultos (int h)
{
int cl=0;
switch(h){
case 0: cl=11000000;
break;
case 1: cl=11111100;
break;
case 2: cl=11111100;
break;
case 3: cl=10010101;
break;
case 4: cl=10010101;
break;
case 5: cl=10011000;
break;
case 6: cl=10011000;
break;
case 7: cl=10101011;
break;
case 8: cl=10001001;
break;
case 9: cl=10001001;
break;
case 10: cl=10000001;
break;
case 11: cl=10000001;
break;
case 12: cl=11011100;
break;
case 13: cl=10000000;
break;
case 14: cl=10000000;
break;
case 15: cl=10001000;
break;
default: cl=11000000;
break;
}
return cl;
}
// Declare your global variables here
int Temp;
int i,d,j;
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
//na wyswietlaczu przed 1 pomiarem powinno byc h4x
DDRA=0xFF;
PORTA=00100101;
DDRB=0xFF;
PORTB=10101011;
DDRC=0xFF;
PORTC=0xff;
DDRD=0xFF;
PORTD=10100101;
DDRE=0x00;
PORTE=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// OC3A output: Discon.
// OC3B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-15: Off
MCUCR=0x00;
EMCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
// 1 Wire Bus initialization
w1_init();
ds18b20_init(0,0, 250, DS18B20_12BIT_RES);
while (1)
{
//Temp = ds18b20_temperature(&rom_code[0][0]);
Temp = ds18b20_temperature(0);
i=Temp;
d = i/10; //część dziesiętna
j = i-(d*10); //część jedności
PORTD =btos(d);
PORTB =btos(j)&01111111;
if(Temp>0)
PORTC = 0xff;
else
PORTC = 0x00;
Temp=Temp << 4;
Temp=Temp & 1111;
PORTA = ultos(Temp);
};
}
Dzięki i Pozdro.
