Skriva ut en byte på valfri pinne?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Anledningen till att jag inte ställde "hela frågan" är att jag inte vill ha en färdig lösning. Isåfall skulle jag lika gärna kunna anlita en konsult som får programmera det hela åt mig. Tanken var att jag istället skulle lära mig (generellt) hur man lägger ut en byte på en pinne.

Ang. datapinnen... Hehe den ändrar jag aldrig riktning på, den står alltid som ingång. Detta till trots verkar det ju fungera ändå... :roll: Rumstemp är 25 grader och om man håller den i handen så blir det 35 grader. Drar man då av 4 grader så stämmer värdena med en vanlig sprittermometer iaf. Mycket märkligt!

Tack för alla svar btw!
sodjan
EF Sponsor
Inlägg: 43267
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, så ursprungsfrågan var igentligen alltså :

"Hur gör man för att skriva ut en byte på en pinne som är satt som ingång ?"

*DET* hade varit en intressant öppning på tråden... :-)
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Har ändrat i koden nu så att den växlar mellan ut och ingång. Detta löste hastighetsproblemet. Nu kan man köra full fart =) Men är det inte lite konstigt att det fungerade (om än inte lika bra) med utgången satt som ingång?

Edit: Mja, hehe det fungerade ju. :roll: Temperaturfelet består dock...
sodjan
EF Sponsor
Inlägg: 43267
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad skriver du till config registret (kommando '0C') ?

Och eftersom du har skrivit till sensorn med datalinjen "floating",
så kan det väl ha skrivits nästan vad som helst till den...
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Om du menar config registret i sensorn så skriver jag inget dit... Det behöver man väl bara göra om man vill pyssla med termostaten, ställa om från 12-bit eller sätta igång kontinuerlig temp-conversion.
sodjan
EF Sponsor
Inlägg: 43267
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> eller sätta igång kontinuerlig temp-conversion.

"Initial state from factory = 0", så det är på om du inte har ändrat.
Och i så fall ska du inte behöva köra kommando 51 för varje mätning
utan bara för att starta kontinuerliga mätningar, om det är det du vill ha...

Du får ändra den till "1" för att få "One-Shot Mode" vilket är det som
koden är skriven för. Notera dock att jag inte vet om det "hjälper"
mot 4 graders avvikelsen...

Men, skit samma, det var ju inte detta du ville ha hjälp med i alla fall...
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Ahh, då var 51 kommandot onödigt. Dock verkar det inte spela nån roll för avvikelsen... Undra om man ska prova en annan krets, kan det vara ett måndags exemplar tro? 4 grader fel är lite väl när den är specad max +-0.5 grader!

Om man vill ha ännu bättre precision vad använder man för sensorer då? De som sitter i de där digitala väggtermometrarna vad har de för sensorer? De visar iaf 0.1 grad, hur exakta de sedan är är iof en annan sak...
sodjan
EF Sponsor
Inlägg: 43267
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kommando 51 behövs i alla fall *en* gång...

Men den viktiga frågan är inte om det är "onödigt" eller inte, utan hur
"DU" vill köra din sensor...

Hur som helst, min poäng var att, *om* det finns ett
config register (vad det än gäller), så är det det alltid är bäst
att sätta det om man vill ha det, och inte förlita sig på defaults.

Dina 4 grader fel går det naturligtsvis inte att ha någon sunpunkt på,
vi vet ju inte ens hur du vet vilket värde du får från sensorn. Hur
kontrollerar du de 12 bitarna du får in ? Och hur är variablen "data"
definierad ? Den måste ju vara > 8 bitar och hur fungerar då t.ex
"data |= 0x80;" ? På den höga eller låga delen ? Och om det är den
låga delen, så manipulerar du ju en bit mitt i temperaturen, eller ?
Det borde väl vara en bit i ena änden som sedan shiftas runt bland
de 12 bitaran...

Men det kanske bara är jag som inte kan läsa C kod... :-)
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Variabeln data är en int, dvs 8 bitar. Detta gör att när jag skiftar in 12 bitar (LSb först...) kommer de fyra lägsta bitarna skiftas bort (de får inte plats mot slutet). De förlorade bitarna är "bara" decimaler. Mao får jag bara ut hela grader med min kod.

Om sensorn ger 0001 1001 xxxx motsvarard detta 25.xxxx grader.

Exemplet på sidan 8 i databladet hänger jag dock inte med på.
0001 1001 0001 motsvarar 25.0625 grader
detta i formatet där S är hurvida det är en negativ temperatur eller inte. Allt är frid och fröjd, men...

1100 1001 0000 ska motsvara -25.0625 grader hur hänger detta ihop? Borde det inte bara vara S-biten som ska vara ändrad? Dvs att -25.0625 motsvaras av 1001 1001 0001.

Edit: La upp HELA koden på föregående sida, efter alla missförstånd etc... :)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Nu var det ganska länge sen jag använde winavr/gcc men inte är väl en int 8 bitar? 16 hade iallafall jag för mig :)
sodjan
EF Sponsor
Inlägg: 43267
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Borde det inte bara vara S-biten som ska vara ändrad?

Nej.

http://en.wikipedia.org/wiki/Two's_complement
Skriv svar