Sida 2 av 4

Postat: 14 juni 2006, 23:18:45
av Kezo
Tack!

EDIT: Fast måste man ha två paralellkopplade motstånd? Räcker det inte med ett av ett annat värde? (vilket isåfall?)

Postat: 14 juni 2006, 23:48:21
av DragonOrb
Totala resistansen för parallelkoplade motstånd:

R1 * R2
---------
R1 + R2



Ett 750 ohm´s motstånd funkar alltså lika bra.

Postat: 15 juni 2006, 00:04:30
av Jeppsson
Bra förklarat DragonOrb :tumupp:

Postat: 15 juni 2006, 22:04:35
av Kezo
hur noga är det med den resistansen?

Postat: 15 juni 2006, 22:49:43
av DragonOrb
Beror ju på vad du har för led.

Postat: 15 juni 2006, 22:53:10
av Kezo
om jag har en röd led som jag använder ett motstånd på 330Ω till, funkar det med det motståndet till detta då?

EDIT: Svarar mig själv, det gjorde det :)

Postat: 18 juni 2006, 15:53:11
av Jeppsson
Det låter som om du har fått igång en LED Touch Sensor!?

Fungerar det bra?

Har du samma "prestanda" med en röd LED som jag hade med min blåa LED??

Postat: 18 juni 2006, 17:28:40
av DragonOrb
Jag har nu också kopplat upp en likadan.

Kör med en röd led som sensor, funkar väldigt bra.
Håller på och experimenterar lite för att få sensorleden att lysa också.

Återkommer :)

edit: Nu lyser även sensorleden :) , nu är det dags att utöka antal knappar :)

Postat: 18 juni 2006, 21:59:25
av Jeppsson
Trevligt att andra oxå får det att fungera...

Det borde inte vara några större problem att få till lite fler "knappar"!

Postat: 18 juni 2006, 23:21:35
av sodjan
Detta har igentligen inget med själva applikationen att göra, men
jag tänkte bara flika in ett par kod-tips som gör koden lite lättare
att läsa (inte för att den är *svår* att läsa nu, men i alla fall... :-)
)

Om du i början av koden lägger till :

Kod: Markera allt

#define   LED_Ind     porta,1
#define   LED_Sens    portb,5
#define   LED_Sens_t  trisb,5
så kan du senare i koden skriva:

Kod: Markera allt

          bcf         LED_Sens_t
...
...
          bsf         LED_Ind
          btfss       LED_Sens
o.s.v.

Det gör nästan kommentarerna på dessa rader överflödiga, men viktigast
är att det blir skitenkelt att flytta de två LED'arna till andra pinnar, bara
ett ställe i "headern" på koden att ändra...

Sedan, ett problem med att göra bcf/bsf själv direkt på STATUS, RPx bitarna
är just att du *själv* måste kolla vilken bank det aktuella registret ligger i.
Det vet ju redan MPASM, så låt MPASM fixa det åt dig med BANKSEL.

Postat: 19 juni 2006, 01:23:59
av Jeppsson
sodjan >> Sedan, ett problem med att göra bcf/bsf själv direkt på STATUS, RPx bitarna
är just att du *själv* måste kolla vilken bank det aktuella registret ligger i.
Det vet ju redan MPASM, så låt MPASM fixa det åt dig med BANKSEL.


Hur fungerar BANKSEL?
Jag hittade detta på microchip.com

Kod: Markera allt

movlw  b00101000  ; setup value into W register
banksel SSPCON1     ; select SFR bank
movwf SSPCON1       ; configure for Master I2C
Innebär det att jag skulle kunna skriva enligt följande?

Kod: Markera allt

banksel TRISA     ; select TRISA bank
bsf TRISA,5         ; Make  RA5 to a input
Sen hoppar programmet tillbaka och körs som vanligt?

Det är alltid bra med lite tips och trix i programmerings djungelen!

Postat: 19 juni 2006, 01:31:33
av sodjan
> Hur fungerar BANKSEL?

Om du instället för svepande frågor är lite mer specifik om vad som
var oklart i manualen, så blir det enklare att svara.

Så, vilken del av beskrivningen av BANKSEL är oklar eller otydlig ??

Postat: 19 juni 2006, 22:05:50
av Jeppsson
Efter bakläxa från Sodjan :oops: så har jag läst på och kommit fram till följande!

Om man vill byta till en BANK där en funktion finns så skriver man helt enkelt bara "BANKSEL funktionnamn" och då kommer det att genereras kod som byter till just den BANKen där den funtionen finns. Sen får man inte glömma att byta tillbaka igen om det nu är så att man t.ex. bara skulle ändra i TRISA och sedan skall köra vidare i sitt program.

Code exempel är ifrån User guide ASM...

Kod: Markera allt

#include p16f877a.inc      ;Include standard header file
                           ;for the selected device.
banksel TRISB              ;Since this register is in bank 1,
                           ;not default bank 0, banksel is
                           ;used to ensure bank bits are correct.
clrf TRISB                 ;Clear TRISB. Sets PORTB to outputs.
banksel PORTB              ;banksel used to return to bank 0,
                           ;where PORTB is located.
movlw 0x55                 ;Set PORTB value.
movwf PORTB
goto $
end                        ;All programs must have an end.
Enligt detta så måste man ändå ha ganska bra koll på vilken funktion som finns i vilken bank...

Postat: 20 juni 2006, 00:12:29
av sodjan
> Om man vill byta till en BANK där en funktion finns...
> ...
> Enligt detta så måste man ändå ha ganska bra koll på vilken
> funktion som finns i vilken bank...

(*Register*, inte "funktion"...)
Banker har inget att göra med var programkoden finns.

Med BANKSEL behöver man *inte* veta i vilken bank register ligger.

Jag ser inte av exemplet från manualen varför du tycker det ?
Det använder BANKSEL före både TRISB och PORTB och man behöver inte
veta i vilken bank som någon av dessa ligger. De skulle kunna ligga i vilken
som helst av processorns 4 banker, och koden fungerar ändå.

Dock, det finns naturligtsvis även en nackdel med BANKSEL, den håller
inte reda på i vilken bank Man befinner sig, så den kommer ofta att generera
"onödig" kod. Om detta är ett problem, så måste man fortfarande gå in
som programmerare och "trimma" koden.

Men vid tester (som t.ex din kod) så kan BANKSEL undvika de mest
enkla buggarna.

Sen finns det utvecklingsmiljöer för PIC assembler som innehåller
funktioner för bank-hantering som även håller reda på vilken bank
som är vald, och som enbart sätter in BCF/BSF instruktioner när det
är nödvändigt, men det är en annan historia... :-)

Postat: 20 juni 2006, 21:37:45
av bengt-re
Det var spännande Sodjan. Det visste jag inte att det fanns stöd för. Inte i Mplab antar jag? Man tycker ju onekligen att en kompilator har all info för att veta om banksel behövs eller inte..