nomore Skrevet 17. august 2010 Rapporter Del Skrevet 17. august 2010 Litt merkelig "feil" her, og derav litt uklar emnetittel? Uansett. Eg har en Arduino fremfor meg som er koblet til en rotary encoder som gir ut en greycode signal på 6 ledinger(6 bit greycode). For å lese av koden har eg derfor koblet disse signalene rett på pinnene 5-10, og satt pinMode til input. Problemet er når eg skal lese av disse. Først leser eg av hver enkelt inngang og tilegner verdien(HØY = 1, LAV = 0) til en spesifik bit i en byte. Dette fungerer ypperlig, så lenge eg debugget. Mens eg debuget så printet eg ut en del på seriellporten for å se at innverdiene stemte overens med resultatet. I det øyeblikket eg fjernet disse Serial.print-linjene så ble resultatet feil. Etter litt søking fant eg da ut at Serial.print-linjene gav koden en liten pause, som av en eller annen grunn sørget for korrekt resultat. Når disse vart borte ble resultatet feil. Dette kan eg omgå ved å enten legge til ei linje med Serial.print eller delay(1) ETTER at pinnene er lest med digitalRead. Her er litt av koden: if (digitalRead(PIN_SENSOR_WAVC)) { bitSet(greycode, 5); } else { bitClear(greycode, 5); } if (digitalRead(PIN_SENSOR_WAVD)) { bitSet(greycode, 4); } else { bitClear(greycode, 4); } if (digitalRead(PIN_SENSOR_WAVE)) { bitSet(greycode, 3); } else { bitClear(greycode, 3); } if (digitalRead(PIN_SENSOR_WAVF)) { bitSet(greycode, 2); } else { bitClear(greycode, 2); } if (digitalRead(PIN_SENSOR_WAVG)) { bitSet(greycode, 1); } else { bitClear(greycode, 1); } if (digitalRead(PIN_SENSOR_WAVH)) { bitSet(greycode, 0); } else { bitClear(greycode, 0); } Eg kan komme med hele koden om nødvendig, men koden fungerer, så eg unngår å overfylle tråden med den atm. Spørsmålet mitt er hvorfor byte variabelen greycode inneholder kun 111111 når eg kjører uten Serial.print eller delay, mens den faktisk inneholder korrekte verdier ellers? Legger eg en av disse linjene(delay eller Serial.print) til før den koden der så har den ingen effekt. Den må komme etter. Forslag mottas Lenke til kommentar
aop9020 Skrevet 18. august 2010 Rapporter Del Skrevet 18. august 2010 legg ut bitSet og bitClear kodene også... Lenke til kommentar
nomore Skrevet 18. august 2010 Forfatter Rapporter Del Skrevet 18. august 2010 Beklager manglende oppdatering. Fikk løst problemet. Noen linjer under så hadde eg en funksjon som konverterte graycoden om til natural binary. I denne funksjonen så initierte eg en byte variabel uten å gi den en verdi. Når eg ikke brukte delay(1)-koden så viste det seg at bit 7 i resultatet, MSB, alltid var 1. Brukte eg delay(1) så var den 0. Siden graycoden kun var 6 bit så var det kun 6 av 8 bit som ble sjekket og endret, og dermed førte den ene bit'en til feil resultat. Naturligvis. Løsningen var å initiere byte variabelene og samtidig sette alle bits til 0. Nå har eg lært at eg ikke må ta for gitt hvilken verdi en variabel får med mindre eg setter verdien selv Lenke til kommentar
aop9020 Skrevet 18. august 2010 Rapporter Del Skrevet 18. august 2010 Bra at det fungerer.. Hva holder du på med? Noe spennende? Lenke til kommentar
nomore Skrevet 18. august 2010 Forfatter Rapporter Del Skrevet 18. august 2010 Eg jobber med en værstasjon og har noen sære sensorer som eg må forholde meg til. Sensorene er noen gamle som har blitt byttet ut i fra en platform i nordsjøen(mao, høy kvalitet). Den konkrete koden over skal da lese inn verdiene på 6 digitale innganger(som da tilsvarer en 6-bit greycode) og gjøre denne om til en standard binær verdi(natural binary i stede for reflected binary). Dette kommer da fra en værhane, og angir hvilken retning vinden blåser. Dette er igjen en del av et større prosjekt. Dette blir en sensorkrets, som skal lese av verdiene på alle tilkoblede sensorer og generere en del andre verdier basert på historikk og tid. Veldig spennende synes nå eg da Lenke til kommentar
aop9020 Skrevet 18. august 2010 Rapporter Del Skrevet 18. august 2010 hvor mange steg per omdreining har enkoderen? Hvilke andre sensorer skal denne "storm-weathersenter-eat-your-heart-out-weather-station" ha? Lenke til kommentar
nomore Skrevet 18. august 2010 Forfatter Rapporter Del Skrevet 18. august 2010 64 steg, 5.6 graders oppløsning. I første omgang blir det vindhastighet, vindretning, barometrisk trykk, temperatur og fukt. Lenke til kommentar
aop9020 Skrevet 18. august 2010 Rapporter Del Skrevet 18. august 2010 Hva skal du ha for å vise dataene? Display? LCD? Oled? Pc? Lenke til kommentar
nomore Skrevet 18. august 2010 Forfatter Rapporter Del Skrevet 18. august 2010 Dataene skal primært sett rett ut på nett, men eg kommer til å lage en løsning både med nettverkstilgang til måledata og et display koblet direkte til kontrolleren. Om du vil høre mer så må du bare ta kontakt med meg på PM. Tråden sporer litt av Lenke til kommentar
nomore Skrevet 19. august 2010 Forfatter Rapporter Del Skrevet 19. august 2010 Kommentaren over virker kanskje noe kort og frekk. Eg vil mer en gjerne dele info, vise hva eg jobber med og svare på spørsmål, men prioriteten min nå er å få en fungerende løsning på plass i forhold til en "deadline" eg har satt. Når eg er ferdig kommer eg nok med mer info og detaljer i en egen tråd Lenke til kommentar
aop9020 Skrevet 19. august 2010 Rapporter Del Skrevet 19. august 2010 no worries.. er bare nysgjerrig =) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå