|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mbaumga1 Član
Pridružen-a: Pon 07 Apr 2008 23:10 Prispevkov: 18 Aktiv.: 0.09 Kraj: Lendava
|
Objavljeno: Tor Feb 09, 2010 10:28 am Naslov sporočila: OneWire in mikroC PRO AVR |
|
|
Sem začetnik v programiranju.Ker sem nabavu ravzvojnu plošču AVR5A uporabljam programski jezik mikroC PRO za AVR.Za začetek preizkušam napisane vzorčne programe.Med temi programi pa je tudi program 1-Wire za meritev temperature.
Mene zanima kako dopolniti program da bere temperaturu iz več senzorjev,2,3,ali več.Program z malim spremembami pa izgleda takole:
MCU: ATmega16
Dev.Board: EasyAVR5
Oscillator: External Clock 8.0000 MHz
Ext. Modules: DS18x20, LCD
SW: mikroC PRO for AVR
* NOTES:
- Place jumper J9 to the right(PB2).
- Pull-up and turn off the LED on pin used for one wire bus (PB2) may be required.
*/
// LCD module connections
sbit LCD_RS at PORTD2_bit;
sbit LCD_EN at PORTD3_bit;
sbit LCD_D4 at PORTD4_bit;
sbit LCD_D5 at PORTD5_bit;
sbit LCD_D6 at PORTD6_bit;
sbit LCD_D7 at PORTD7_bit;
sbit LCD_RS_Direction at DDD2_bit;
sbit LCD_EN_Direction at DDD3_bit;
sbit LCD_D4_Direction at DDD4_bit;
sbit LCD_D5_Direction at DDD5_bit;
sbit LCD_D6_Direction at DDD6_bit;
sbit LCD_D7_Direction at DDD7_bit;
// End LCD module connections
// Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
// 18S20: 9 (default setting; can be 9,10,11,or 12)
// 18B20: 12
const unsigned short TEMP_RESOLUTION = 9;
char *text = " 00.0000";
unsigned temp;
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
// check if temperature is negative
if (temp2write & 0x8000) {
text[1] = '-';
temp2write = ~temp2write + 1;
}
// extract temp_whole
temp_whole = temp2write >> RES_SHIFT ;
// convert temp_whole to characters
//if (temp_whole/100)
//text[0] = temp_whole/100 + 48;
//else
// text[0] = '0';
text[1] = (temp_whole/10)%10 + 48; // Extract tens digit
text[2] = temp_whole%10 + 48; // Extract ones digit
// extract temp_fraction and convert it to unsigned int
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
// convert temp_fraction to characters
text[4] = temp_fraction/1000 + 48; // Extract thousands digit
text[5] = (temp_fraction/100)%10 + 48; // Extract hundreds digit
text[6] = (temp_fraction/10)%10 + 48; // Extract tens digit
text[7] = temp_fraction%10 + 48; // Extract ones digit
// print temperature on LCD
Lcd_Out(1, 7, text);
}
void main() {
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, "Temp1: ");
// Print degree character, 'C' for Centigrades
Lcd_Chr(1,15,223); // Different LCD displays have different char code for degree
// If you see greek alpha letter try typing 178 instead of 223
Lcd_Chr(1,16,'C');
Lcd_Out(2, 1, "Temp2: ");
Lcd_Chr(2,15,223);
Lcd_Chr(2,16,'C');
//--- main loop
do {
//--- perform temperature reading
Ow_Reset(&PORTB, 2); // Onewire reset signal
Ow_Write(&PORTB, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTB, 2, 0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTB, 2);
Ow_Write(&PORTB, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTB, 2, 0xBE); // Issue command READ_SCRATCHPAD
Delay_ms(400);
temp = Ow_Read(&PORTB, 2);
temp = (Ow_Read(&PORTB, 2) << 8) + temp;
//--- Format and display result on Lcd
Display_Temperature(temp);
Delay_ms(500);
} while (1);
}
Prosim pomoč za spodbudo v nadaljnem delu.
Lep pozdrav |
|
Nazaj na vrh |
|
|
mbaumga1 Član
Pridružen-a: Pon 07 Apr 2008 23:10 Prispevkov: 18 Aktiv.: 0.09 Kraj: Lendava
|
Objavljeno: Tor Feb 09, 2010 11:03 am Naslov sporočila: |
|
|
Zanima me kaj menite o programskem jeziku mikriC PRO AVR. Predlagajte mi boljšega za začetnika da podpira razvojno ploščo AVR5A.
Hvala za nasvete
LP |
|
Nazaj na vrh |
|
|
Krampus Član
Pridružen-a: Pon 08 Sep 2008 13:07 Prispevkov: 1829 Aktiv.: 9.30
|
|
Nazaj na vrh |
|
|
kranjc Član
Pridružen-a: Pon 29 Mar 2004 20:13 Prispevkov: 228 Aktiv.: 0.99 Kraj: Cerknica
|
Objavljeno: Tor Feb 09, 2010 11:46 am Naslov sporočila: |
|
|
Jaz imam za PICke mikroC pa se mi zdi super. Ima odlično pomoč z primeri ter zelo bogate knjižnice. |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 265 dni
Powered by phpBB © 2001, 2005 phpBB Group
|