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

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Avg 08, 2007 10:44 pm Naslov sporočila: |
|
|
Načeloma v redu, samo ne vem če res rabiš spreminjat osvetlitev LCDja.
offtopic: Predvidevam, da so tisti kvadratki na koncu "žic" v shemi fizično povezani nekam drugam v shemi. Kako to narediš v eaglu?
LP, Mitja
|
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Sre Avg 08, 2007 10:46 pm Naslov sporočila: |
|
|
dragoon je napisal/a: |
offtopic: Predvidevam, da so tisti kvadratki na koncu "žic" v shemi fizično povezani nekam drugam v shemi. Kako to narediš v eaglu?
|
Vsako povezo preimenuješ posebaj.
_________________ Denis |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sre Avg 08, 2007 11:37 pm Naslov sporočila: |
|
|
Obvezno daj 10kOhm upor med Vcc in priključkom 1 na trimerju za kontrast. Pa trimer je dovolj 470 do 1000 ohm.
Vezava je drugače v redu, pazi pa na maksimalen tok osvetlitve LCDja. Včasih ga je potrebno malo omejiti s kakim 39 ali 68 ohm uporom med Vcc in A . Glej datasheet od tvojega LCDja.
LP,
Igor
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Čet Avg 09, 2007 12:11 am Naslov sporočila: |
|
|
dragoon je napisal/a: |
Načeloma v redu, samo ne vem če res rabiš spreminjat osvetlitev LCDja. |
Po resnici povedano res nebi tako zelo rabil spreminjat osvetlitve ampak bom to vseeno naredil. Rad malo eksperimentiram. Pa še vredu zgleda Če ne druga pa zato da se še bom kaj naučil in morda rabil v naslednjem projektu.
dragoon je napisal/a: |
offtopic: Predvidevam, da so tisti kvadratki na koncu "žic" v shemi fizično povezani nekam drugam v shemi. Kako to narediš v eaglu? |
To je konektor. Pač vzameš tak simbol za priključek (to dejansko je 11pinska letvica) ki nima oblike konektorja v celem ampak vsak priključek posebaj in pol lahko postaviš ta priključek kamorkoli v vezju brez da bi naredil neko dolgo povezavo.
|
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Sre Jun 04, 2008 1:36 pm Naslov sporočila: |
|
|
Spet se obračam na vas.
Merim temperaturo z AVR-jem. Rezultat meritve dobim v spremenljivki tipa float ki je 32 bitna. Kako naj to razbijem na 4 8 bitne dele da bi jih lahko poslal preko rs232? Ali pa če ima kdo kakšno drugo metodo? Ne pride pa vpoštev pošiljanje stringa saj moram rezultat meritve stlačit v odgovor MCU na zahtevo PC-ja v tej obliki:
Koda: |
|_________________|___________________________|____________________|__________|___________|
Dolžina sporočila Kakšen podatek se prenaša številka senzorja vrednost checksum
(naslov sporočila) ( vsebina sporočila )
8b 8b 8b 32b 8b |
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Jun 04, 2008 4:44 pm Naslov sporočila: |
|
|
Koda: |
float temp;
char prvi,drugi,tretji,cetrti;
prvi= temp && 0xFF;
temp>>=8;
drugi= temp && 0xFF;
temp>>=8;
tretji= temp && 0xFF;
temp>>=8;
četrti= temp && 0xFF;
|
Lahko pa tak paket pošlješ večkrat (?), pač v vsakem en (štiri) znake stringa. Koneckoncev pa lahko pošlješ tudi string, prostora imaš za 4 znake.
edit: nonsense...
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Sre Jun 04, 2008 4:57 pm Naslov sporočila: |
|
|
Smem vprašat zakaj nonsense??
BitShift pa ne deluje na spremenljivkah tipa float. Verjemi poskusil sem že nekaj metod ki se nekak niso izkazale dobre. Tako da to nebo šlo.
Imam pa še eno idejo pa bi prosil če malo pokomntirate.
Float se pri 8bitnih mikrokrmilnikih shrani v 4 byte v sramu. Bi blo možno da bi naslove teh bytov nekak dobil in podatke na teh naslovih preprosto uporabil za pošiljanje na uart? Če ja kako?
Koda: |
float podatek;
char prvi,drugi,tretji,cetrti;
*prvi_byte=&podatek;
*drugi_byte=&podatek+1;
*tretji_byte=&podatek+2;
*cetrti_byte=&podatek+3;
|
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Jun 04, 2008 5:17 pm Naslov sporočila: |
|
|
madzi je napisal/a: |
Smem vprašat zakaj nonsense?? |
Prej sem nekaj zaj... pri programu, pa sem popravil.
aha, float seveda ne moreš šiftat pozabil, lahko pa takole:
Koda: |
float temp ;
int * ptr = (int *)(& temp);
prvi=temp && 0xff;
*ptr>>=8;
drugi=temp && 0xff
....
|
verjetno bi tudi ta tvoj način deloval?
Kaj pa če pošlješ kost string, pač pošlješ več paketkov, v vsakem en znak stringa?
edit:spet sem popravljal; nekej me pointerji [cenzurirano]...
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Jun 04, 2008 6:23 pm Naslov sporočila: |
|
|
Ah, klinc, ta koda zgoraj ne dela po pričakovanjih. Sem šel malo probavat, pa se mi nikakor ne izide...
Bo kdo drug povedal, jaz ne bom več pametoval tam kjer nimam pojma.
Pa še int je na AVRju (CV?) verjetno 16 biten in ne 32 tako kot na 32 bitnoh mašinah...
išči pod casting, pointer, float shifting,....
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
spy Član


Pridružen-a: Sre 06 Sep 2006 20:43 Prispevkov: 403 Aktiv.: 1.76 Kraj: Tržič
|
Objavljeno: Sre Jun 04, 2008 7:27 pm Naslov sporočila: |
|
|
Če ti kaj pomaga:
jaz integer spravim v dva byte-a z deljenjem z 0x100. Recimo:
char izhod1, izhod2;
int vhod;
izhod1=vhod/0x100; //MSB
izhod2=vhod; //LSB
Pa dela v redu. Probej enako za float, če gre.
|
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sre Jun 04, 2008 7:58 pm Naslov sporočila: |
|
|
@spy, to ne bo šlo. Float je čisto drugače zapisan v spominu kakor integer. Deljenje z 0x100 - isto kakor shiftanje, glej moj prvi post
@madzi:
kje pa dobiš ta tvoj float? zakaj ne pošlješ kar podatka, ki ga dobiš iz senzorja, ta sigurno ni float. obdeluješ pa naprej na kompu.
Je pa kolega rašil tisti problem razbijanja na 4 byte (hvala Tadej!):
Koda: |
#include <stdio.h>
int main(int argc, char *argv[])
{
float nazaj; // spremenljivki za testiranje obratne operacije
char *naz; // -^-^-^-
float temp = 234.33;
unsigned char t1, t2, t3, t4; //začasne spremenljivke
char test = 0; //spremenljivka, ki hrani offset do floata
test = (unsigned int)&temp - (unsigned int)&test; //izračunamo offset do floata
t1 = *(&test+test); //t1 nastavimo 1. bit floata, ki je za offset oddaljen od lokacija chara...
t2 = *(&test+test+1);
t3 = *(&test+test+2);
t4 = *(&test+test+3);
printf("%d %d %d %d\n\n", t1, t2, t3,t4);
//še obratno
test = (unsigned int)&nazaj - (unsigned int)&test;
naz = &test+test;
(*naz) = t1;
naz = &test+test+1;
(*naz) = t2;
naz = &test+test+2;
(*naz) = t3;
naz = &test+test+3;
(*naz) = t4;
printf("%f", nazaj);
system("PAUSE");
return 0;
}
|
kodo lahko direktno probaš na računalniku, za avr boš pa že sam priredil.
_________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Sre Jun 04, 2008 11:12 pm Naslov sporočila: |
|
|
Kje si sploh iz senzorja dobil float? In zakaj stvar preprosto ne pretvoriš v string? Tako je še najlažje za pošiljanje preko uarta, drugače stvari sploh ne moreš preveriti v kakšnem terminalu ... v vsakem primeru pa stvar potem pretvoriš nazaj v float / int na pc-ju.
Namesto float-a lahka uporabiš tudi kar integer -- po vsej verjetnosti ima več kot dovolj dobro natančnost (lahko številko malo skaliraš, da dobiš tudi decimalke ...).
Če pa že res moreš pošiljati float, potem pa pride prav finta z union-om: deklariraš union, ki vsebuje en float in en char[4], unionu nastaviš vrednost kot float, bereš pa kot štiri char-e.
LP!
|
|
Nazaj na vrh |
|
 |
madzi Član

Pridružen-a: Sre 24 Sep 2003 10:46 Prispevkov: 315 Aktiv.: 1.33 Kraj: Pragersko, Dragonja vas, Maribor
|
Objavljeno: Sre Jun 04, 2008 11:41 pm Naslov sporočila: |
|
|
Sem že pogruntal kak bom naredil. Malo sem tudi po svoji neumnosti zabluzil...., sem skoraj sam sebe hotel prehiteti
Uporabljam neko že narejeno knjižnico za branje temperature ki je iz podatka iz senzorja skalkulirala ta "float". Sedaj sem začel na novo pisati funkcijo za branje iz senzorja da bo vse malo bolj jasno še najbolj pa bom jaz vedel kak je na stvari. Prenašal pa bom vrednost ki pride direkt iz senzorja in se na srečo nabom rabil ukvarjat z kakimi pretvorbami saj je že v 3 bytnem formatu.
Da nočem prenašat stringa do računalnika je zarad tega ker hočem ohranit pravo vrednost (nevem kak naj drugač povem) in na PC-ju opravit vse drugo. Tako bom še prihranil nekaj MCU-jevega časa. Prikaz v kakem terminalu pa mi nič ne pomeni saj imam že skoraj napisano aplikacijo v c#. Več ali manj še samo dodajam funkcionalnosti ki jih napišem za AVR-a.
Hvala in LP
|
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|