 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - struževo
|
Objavljeno: Tor Mar 01, 2011 8:27 pm Naslov sporočila: 1-wire senzor in radio modul |
|
|
Prestavljeno iz ZS:
compaq je napisal/a: |
Pozdravljen
Malo sem brskal po forumu in sem yasledil da se kar dosti ukvarjas y one-wire senzorji...
Mogoce bo se mal cudno zvenelo ampak imam kar nekaj vprasanj glede tega projekta, ker sam izdelujem nekaj podobnega...
moja ideja...
senzor-RF -pic-lcd
bi bilo to tako izvedljivo, ali mora bit na strani senzorja tudi ukontroler
bi sploh delovalo z vecimi DS senzorji (sorry ker ne dajem vprasajev, ampak mi nekaj tipkovnica nagaja....)
hvala za pomoc
lp |
Zdravo, 1-wire senzorji - no odvisno od tega, kateri čip imaš v mislih, rabijo kar nekaj energije in časa, da opravijo svojo nalogo. Temperaturni recimo 1 sekundo in morajo biti ta čas dobro napajani.
Če misliš uporabit RFID, potem rabiš na strani senzorja vsaj en konkreten RFID modulatorski sprejemno-oddajni čip.
Še nekaj pasivnih komponent, pa bi mogoče celo šlo.
Seveda med tem, ko senzorji delujejo, mora biti RFID zanka aktivna na polno, da dovede dovolj energije za vse čipovje.
Moči mora biti toliko, da dobiš ven 5V. Koliko toka, je odvisno od posameznega 1-w čipa.
compaq je napisal/a: |
Ja za, nabavil sem tistega od SE, ki obratuje na 433MHz
ampak dvome mi postavlja, misel, da ce na oddajni strani ni PIC-a da mi potem nebo delovalo. Mogoce z enim DS-jem gre, ampak ce bi jih dal kaj vec bi se zadeva verjetno zakomplicirala...
ti programiras v asemblerju |
Radio modul je čisto drugo kot RFID. Če bi že prej kaj več napisal...
Ja, vsekakor rabiš mikrokontroler na obeh straneh.
PIC-e sem "odpisal" že pred leti, assembler pa tudi. Ampak za tako malo aplikacijo bi šlo brez težav tusi v ASM. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
compaq Član


Pridružen-a: Tor 10 Mar 2009 12:53 Prispevkov: 100 Aktiv.: 0.50 Kraj: Maribor
|
Objavljeno: Tor Mar 01, 2011 8:37 pm Naslov sporočila: |
|
|
aly super ideja, verjetno bo komu drugemu tudi prav prišlo...
PIC sem izbral, ker sem že prejšnji projekt one-wire naredil z njim, tak da sem ga že malo spoznal.
Ja komunikacija bi bila preko radio modula, begala me je pa ta zadevica če na obeh straneh ali pa samo na eni.
Tak na grobo si predstavljam delovanje...čip na oddajniku odčita, mogoče tudi preračuna kakšno temperaturo (povprečna, maksimalna, minimalna), na drugi strani pa obdelava, izpis na LCD....edino moram preveriti kaj in kako lahko kaj pošiljam po RF modul-u, ker je to "nova voda" zame.
Sam uporabljam C, tak da ASM odpade
lp |
|
Nazaj na vrh |
|
 |
compaq Član


Pridružen-a: Tor 10 Mar 2009 12:53 Prispevkov: 100 Aktiv.: 0.50 Kraj: Maribor
|
Objavljeno: Pon Mar 07, 2011 10:18 am Naslov sporočila: |
|
|
@aly
Imaš ti mogoče pri roki kakšen vir/literaturo kje bi našel kako bi lahko naredil RX/TX kounikacijo med dvema PIC-ema? Za začetek bi čist zadostovalo, če bi mi uspelo prižiganje ledice na MC2, medtem ko na MC1 pritisnem tipko...
kakšen primer tudi nebi škodoval... _________________ Za vsakega drifterja raste robnik!! |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3387 Aktiv.: 15.99
|
Objavljeno: Pon Mar 07, 2011 11:32 am Naslov sporočila: |
|
|
Compaq, tukaj je lepo prikazano, kako to deluje. Našel sem ti drugi del od treh o RF komunikaciji (kam je izginil prvi?). Malce še poglej med AVR tutoriali.....
Sicer je za AVR, ampak glede na to da uporabljaš C, princip povsem ustreza.
Pa še kaj drugega se tu med tutoriali najde.
EDIT: Našel!. Spodaj med odgovori in vprašanji sta tudi povezavi na 1. in 2. del
Nazadnje urejal/a lojzek Pon Mar 07, 2011 11:36 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Musty Član



Pridružen-a: Sob 28 Apr 2007 8:54 Prispevkov: 1575 Aktiv.: 7.13 Kraj: Rače
|
|
Nazaj na vrh |
|
 |
compaq Član


Pridružen-a: Tor 10 Mar 2009 12:53 Prispevkov: 100 Aktiv.: 0.50 Kraj: Maribor
|
Objavljeno: Pon Mar 07, 2011 3:29 pm Naslov sporočila: |
|
|
lojzek je napisal/a: |
Compaq, tukaj je lepo prikazano, kako to deluje. Našel sem ti drugi del od treh o RF komunikaciji (kam je izginil prvi?). Malce še poglej med AVR tutoriali.....
Sicer je za AVR, ampak glede na to da uporabljaš C, princip povsem ustreza.
Pa še kaj drugega se tu med tutoriali najde.
EDIT: Našel!. Spodaj med odgovori in vprašanji sta tudi povezavi na 1. in 2. del |
Hvala ti!
Sem sam tudi našel to, ampak sem bil v dvomih kako in pa kaj naredit da bi mi delovalo...sicer sem nekaj poskušal naredit, ampak še brez kakpnih rezultatov. Bov v teku dneva še poskušal, pa če nebo šlo bom kar tisto kodo pripel, pa da mi svetujete kaj oz. kje sem naredil napako.....
lp _________________ Za vsakega drifterja raste robnik!! |
|
Nazaj na vrh |
|
 |
compaq Član


Pridružen-a: Tor 10 Mar 2009 12:53 Prispevkov: 100 Aktiv.: 0.50 Kraj: Maribor
|
Objavljeno: Ned Mar 27, 2011 10:22 pm Naslov sporočila: |
|
|
Končno sem našel nekaj časa in sem se začel ukvarjat z mojim projektom.
Torej trenutno stanje.....
Uporablajm 2, enega za čitanje temperature drugega pa pač za prikaz na LCD zaenkrat.
Za komunikacijo sem izbral Manchester knjižnico (MikroC pro).
Torej kaj je moja težava, zadeva deluje AMPAK včasih mi nagaja, na trenutke deljuje perfektno, na trenutke pa se "sistem" postavlja nekaj časa, se izpišejo na LCD-ju tudi nekakšne vrste hieroglifi ..... Ima mogoče kdo kakšno idejo kaj bi naredil narobe?
koda za transmiter:
Koda: |
sbit MANTXPIN at RB2_bit; //Dolocitev oddajnega pina
sbit MANTXPIN_Direction at TRISB2_bit;
unsigned char character;
unsigned int index;
// String array to store temperature value to display
char *temp = "000.00";
//char txt[8];
// Temperature Resolution : No. of bits in temp value = 9
const unsigned short TEMP_RES = 9;
// Variable to store temperature register value
unsigned temp_value;
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RES - 8;
// Variable to store Integer value of temperature
char temp_whole;
// Variable to store Fraction value of temperature
unsigned int temp_fraction;
// check if temperature is negative
if (temp2write & 0x8000) {
temp[0] = '-';
// Negative temp values are stored in 2's complement form
temp2write = ~temp2write + 1;
}
// Get temp_whole by dividing by 2 (DS1820 9-bit resolution with
// 0.5 Centigrade step )
temp_whole = temp2write >> RES_SHIFT ;
// convert temp_whole to characters
if (temp_whole/100)
// 48 is the decimal character code value for displaying 0 on LCD
temp[0] = temp_whole/100 + 48;
else
temp[0] = '0';
temp[1] = (temp_whole/10)%10 + 48; // Extract tens digit
temp[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;
temp[3]='.';
// convert temp_fraction to characters
temp[4] = temp_fraction/1000 + 48; // Extract tens digit
temp[5] = (temp_fraction/100)%10 + 48; // Extract ones digit
// print temperature on LCD
Man_Send(0x0B); // Send "start" byte
Delay_ms(50); // Wait for a while
for (index=0; index<6; index++){ // String ends with zero
Man_Send(temp[index]); // Send character
Delay_ms(50); // Wait for a while
}
Man_Send(0x0E); // Send "end" byte
Delay_ms(500);
}
void main() {
CMCON |= 0x07; // Disable Comparators
Man_Send_Init(); //Iniciazavcija Manchester knjižnice
Delay_ms(100);
//--- perform startup temperature reading
Ow_Reset(&PORTA, 4); // Onewire reset signal
Ow_Write(&PORTA, 4, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 4, 0x44); // Issue command CONVERT_T
Delay_ms(600);
//--- main loop
do {
//--- perform temperature reading
Ow_Reset(&PORTA, 4); // Onewire reset signal
Ow_Write(&PORTA, 4, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 4, 0x44); // Issue command CONVERT_T
//Delay_ms(600);
// If this delay is less than 500ms, you will see the first reading on LCD
//85C which is (if you remember from my article on DS1820)
//a power-on-reset value.
Ow_Reset(&PORTA, 4);
Ow_Write(&PORTA, 4, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 4, 0xBE); // Issue command READ_SCRATCHPAD
// Read Byte 0 from Scratchpad
temp_value = Ow_Read(&PORTA, 4);
// Then read Byte 1 from Scratchpad and shift 8 bit left and add the Byte 0
temp_value = (Ow_Read(&PORTA, 4) << 8) + temp_value;
//--- Format and display result on Lcd
Display_Temperature(temp_value);
} while (1);
} |
pa še koda za reciver:
Koda: |
// LCD connections definitions
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char temp;
unsigned char error;
unsigned int ErrorCount;
char *polje = "000.00";
unsigned int index;
// Manchester module connections
sbit MANRXPIN at RC7_bit;
sbit MANRXPIN_Direction at TRISC7_bit;
// End Manchester module connections
void main() {
ErrorCount = 0;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF);
Man_Receive_Init(); // Initialize Receiver
index=0;
while (1) { // Endless loop
Lcd_Cmd(_LCD_FIRST_ROW); // Move cursor to the 1st row
while (1) { // Wait for the "start" byte
temp = Man_Receive(&error); // Attempt byte receive
if (temp == 0x0B)
{
index=0; // "Start" byte, see Transmitter example
break;
} // We got the starting sequence
if (error) // Exit so we do not loop forever
break;
}
do
{
temp = Man_Receive(&error); // Attempt byte receive
if (error) { // If error occured
//Lcd_Chr_CP('?'); // Write question mark on LCD
ErrorCount++; // Update error counter
if (ErrorCount > 5) { // In case of multiple errors
temp = Man_Synchro(); // Try to synchronize again
//Man_Receive_Init(); // Alternative, try to Initialize Receiver again
ErrorCount = 0; // Reset error counter
}
}
else {
if (temp != 0x0E)
//Lcd_Chr_CP(temp);
polje[index]=temp;
index++;
}
Delay_ms(25);
}
while (temp != 0x0E) ;
Lcd_Out(2, 5, polje);
}
} |
komentarji pri nekaterih vrsticah niso pravilni!
Hvala za pomoč že v naprej!
lp _________________ Za vsakega drifterja raste robnik!! |
|
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: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|