Läsa in höga värden på en pinne... (AVR,Assebler)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Snouser
Inlägg: 107
Blev medlem: 15 november 2006, 22:07:55
Ort: Göteborg

Läsa in höga värden på en pinne... (AVR,Assebler)

Inlägg av Snouser »

Jag har börjat experimentera lite med en sensor som jag tänkte använda som strömbrytare istället för en vanlig switch. Problemet är bara att jag inte kan få min kod att fungera...

Databladet till sensorn jag har köpt finns här:
http://www.parallax.com/dl/docs/prod/au ... r-V1.1.pdf

Enligt databladet så ska sensorn skicka ut ett högt värde vilket man sedan kan läsa in på uC.

uC jag använder är en Mega88:
http://www.avrfreaks.net/index.php?modu ... l=&iid=423

Så här ser min kod ut:

Kod: Markera allt

.org 0x0000 ;Start adressen
.INCLUDE "m88def.inc" ;Inkluderar filen för uC
.DEF Temp = r18 ;Definerar ett tempregister
.Def Delay2 = r19
.Def Delay = r20

ldi Temp, HIGH(RAMEND) ;Sätter stacken, eller något sådant
out SPH, Temp
ldi Temp, LOW(RAMEND)
out SPL, Temp


ser Temp ;Sätter diodportarna till ut
out DDRB, Temp

ldi Temp, 0b11111110; Sätter port ett till ingång
out DDRC, Temp

rjmp main ; Hoppar till start
 
main:

rcall slack_gul ;Släcker gul diod
rcall gron_diod ; Tänder grön diod

sensor:
in Temp, PINC ;Kontrollerar ifall något rör sig
cpi Temp, 0x00
breq sensor ;Om inte hoppar tillbaka till start

rcall gul_diod ; Hoppar för att tända gul diod

rjmp main ; Hoppar tillbaka till start

gron_diod:
sbi PORTB, 0 ;Tänder grön diod
ret ;Hoppar tillbaka

gul_diod:
sbi PORTB, 1 ;Tänder gul diod
ret ;Hoppar tillbaka

slack_gul:
cbi PORTB, 1 ;Släcker gul diod
ret ;Hoppar tillbaka

DLY:
dec Delay
brne DLY
dec Delay2
brne DLY
ret

Jag gissar på att det är denna kod som strular:

Kod: Markera allt

in Temp, PINC ;Kontrollerar ifall något rör sig
cpi Temp, 0x00
breq sensor ;Om inte hoppar tillbaka till start
Allt fungerar bra när jag simulerar de i AVR Studio, alltså när jag sätter PINC till 0xFF.

Jag har f.ö kopplat en diod till PB0, den lyser som den ska.
Sedan så har jag en till PB1, men den lyser inte alls.
Sist men inte minst så har jag kopplat in sensorn till port PC0.


Vad skulle kunna vara felet, varför lyser inte dioden PB1 när man viftar på armarna?
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Har du provat att stimulera ingången med något annat än sensorn? det är inte säkert att sensorn ger signal. Om mjukvaran tänder lysdioden i fall att en sladd kopplas mellan PC0 och +5V syns det om felet ligger i mjukvaran.

Nu jämförs hela PINC med 0 trots att endast bit 0 är intressant. Om PORTC sätts till något annat värde än noll kommer gul lysdiod alltid att tändas. Gör om villkoret så att endast bit 0 påverkar.
Snouser
Inlägg: 107
Blev medlem: 15 november 2006, 22:07:55
Ort: Göteborg

Inlägg av Snouser »

Ja de va ju lite smartare att jämföra en pinne.

Eter lite läsande så kom ja fram till att de skulle se ut så här istället:

Kod: Markera allt

sensor:
sbis PINC,0
rjmp sensor
Det händer inte så mycket med sensorn, men om ja lägger spänning på PC0 så lyser lampan.

Vad skulle kunna vara felet med sensorn?
Det borde väll bara vara att koppla OUT till ingången på uC, plus till VCC och minus till GND, eller?
Mindmapper
Inlägg: 7122
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Inlägg av Mindmapper »

I dokumentet du länkade till står det:

Note: The sensor is active high
when the jumper (shown in the
upper left) is in either position.


Säger inte så mycket, men har du provat bygeln!
En annan sak du kan prova är att aktivera pull-up på ingången i MEGA88'an.
Snouser
Inlägg: 107
Blev medlem: 15 november 2006, 22:07:55
Ort: Göteborg

Inlägg av Snouser »

Pullup är ett bra alternativ.

Skulle detta fungera?

Kod: Markera allt

ldi Temp, 0b11111110; Sätter port ett till ingång
out DDRC, Temp
ldi Temp,0b00000001 ;Aktiverar pullup
out PORTC, Temp 

sensor:
sbic PINC,0 ;Kontrollerar ifall något rör sig
rjmp sensor
Jag får nämligen motsatta effekten.
Just nu så tror den alltid att PINC, 0 är noll.
Enligt min bok jag har framför mig så ska allt vara ett fram tills någon trycker på knappen....
Mindmapper
Inlägg: 7122
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Inlägg av Mindmapper »

Kan det vara så att PIR-sensorn hela tiden trycker på knappen?
Snouser
Inlägg: 107
Blev medlem: 15 november 2006, 22:07:55
Ort: Göteborg

Inlägg av Snouser »

Kan det vara så att PIR-sensorn hela tiden trycker på knappen?
Enligt databladet så skickar den bara ut en högsignal om något rör på sig.

Betyder inte detta att jag inte kan köra vanlig pullup?
Jag menar, meningen är vad jag vet att när man trycker på en knapp så ska porten gå låg och någon ska sedan hända. De sensorn gör är att den skickar ut en hög signal när något händer. Kan man verkligen använda pull-up när sensorn beter sig som den gör?

Borde de inte med andra ord vara lättare att bara kontrollera när porten är hög?

Ungefär så här

Kod: Markera allt

sensor:
sbis PINC, 0
rjmp sensor
Snouser
Inlägg: 107
Blev medlem: 15 november 2006, 22:07:55
Ort: Göteborg

Inlägg av Snouser »

Tjohooo!

De fungerade bra att köra de senaste kodsnutten ja skrev.

Tack för all hjälp :D
Mindmapper
Inlägg: 7122
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Inlägg av Mindmapper »

Härligt!

Edit: Det var ju samma kod du provkörde tidigare.
Skriv svar