www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

OneWire in mikroC PRO AVR

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
mbaumga1
Član
Član



Pridružen-a: Pon 07 Apr 2008 23:10
Prispevkov: 18
Aktiv.: 0.09
Kraj: Lendava

PrispevekObjavljeno: Tor Feb 09, 2010 10:28 am    Naslov sporočila:  OneWire in mikroC PRO AVR Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mbaumga1
Član
Član



Pridružen-a: Pon 07 Apr 2008 23:10
Prispevkov: 18
Aktiv.: 0.09
Kraj: Lendava

PrispevekObjavljeno: Tor Feb 09, 2010 11:03 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Krampus
Član
Član



Pridružen-a: Pon 08 Sep 2008 13:07
Prispevkov: 1826
Aktiv.: 9.59

PrispevekObjavljeno: Tor Feb 09, 2010 11:18 am    Naslov sporočila:   Odgovori s citatom

Dobra podpora

http://www.mikroe.com/forum/viewforum.php?f=139

_________________
Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
kranjc
Član
Član



Pridružen-a: Pon 29 Mar 2004 20:13
Prispevkov: 225
Aktiv.: 1.01
Kraj: Cerknica

PrispevekObjavljeno: Tor Feb 09, 2010 11:46 am    Naslov sporočila:   Odgovori s citatom

Jaz imam za PICke mikroC pa se mi zdi super. Ima odlično pomoč z primeri ter zelo bogate knjižnice.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 79 dni


Powered by phpBB © 2001, 2005 phpBB Group