Sida 3 av 3

Re: PIC och 1wire, strömstrul?

Postat: 12 december 2011, 08:06:40
av sodjan
Jo, det är förväntat, om det där faktiskt är *hela* koden.
Prova detta och se om det gör skillnad.

while(1)
{
ANSEL=0
ANSELH=0
PORTC.0=1;
PORTC.1=1;
}

Re: PIC och 1wire, strömstrul?

Postat: 12 december 2011, 13:59:57
av Oltronix
Ja förväntat om man känner till problemet med RMW
Nej inte förväntat om man använder normal logik. Om man ändrar en bit så påverkar man även en annan bit är inte vad man förväntar sig av en instruktion.

Följande hela kod körs nu.
#include "16F690.h"
#pragma config |= 0x00D4
void main( void)
{
TRISC = 0;
PORTC = 0;
ANSEL=0; /*Tillägg sedan tidigare*/
while(1)
{
PORTC.0=1; /*01*/
PORTC.1=1; /*11*/
PORTC.0=0; /*10*/
PORTC.1=0; /*01*/
}
}

Då ser det ut som man kan förvänta sig med normal logik. Det är inressant spec om man läser Kap 4.2.1 ANSEL AND ANSELH REGISTERS i 16F690s datablad. Citat: 'The state of the ANSx bit has no effect on the digital
output function of its corresponding pin.'

Re: PIC och 1wire, strömstrul?

Postat: 12 december 2011, 14:14:39
av bearing
Detta beror väl på att en CPU kör sina instruktioner över en databuss. Den kan inte skriva till en enskild bit i ett register, utan BSF/BCF läser 8 bitar över bussen, ändrar biten, och skriver sedan tillbaka 8 bitar över bussen.

Re: PIC och 1wire, strömstrul?

Postat: 12 december 2011, 14:55:21
av sodjan
> Nej inte förväntat om man använder normal logik.

Om man RTFM så är det förväntat och "as documented".

> Om man ändrar en bit så påverkar man även en annan bit är inte
> vad man förväntar sig av en instruktion.

Jo, i detta fall är det det. Om man har lite koll på vad man håller på
med. Samt läser på lite, som sagt. :-)

Men visst, just detta fenomen är en vanlig "nybörjar fälla". Man råkar ut
för det en gång, sedan kan man hålla på 10 år utan att det händer igen.

> Citat: 'The state of the ANSx bit has no effect on the digital
> output function of its corresponding pin.'

Exakt. Och det stämde ju också, eller hur!
Dina kommandon ändrade ju den aktuella pinnen helt korrekt (även innan).

Två meningar senare i samma stycke som ditt citat var hämtat från, står det:

> Pins with the ANSx bit set always read ‘0’, which can cause unexpected
> behavior when executing read or write operations on the port due to the
> read-modify-write sequence of all such operations.

Och det var ju precis det som du såg.

I kapitel "4.5 PORTC and TRISC Registers" (vilket ju är centralt om man håller
på med PORTC) står det :

> All write operations are read-modify-write operations. Therefore, a write to
> a port implies that the port pins are read, this value is modified and then
> written to the PORT data latch.

Och i den lilla gråa rutan (den är grå och det står "Note:" i fet stil av en anledning)
står det :

> Note:
> The ANSEL and ANSELH registers must be initialized to configure an analog
> channel as a digital input. Pins configured as analog inputs will read ‘0’.

Så jag tycker nog att informationen som sådan finns där. Problemet som
nybörjare är så klart att fatta att en BCF/BSF och *läser* från porten. :-)

Re: PIC och 1wire, strömstrul?

Postat: 12 december 2011, 19:59:28
av Oltronix
Fint som snus. Tack för hjälpen!

Re: PIC och 1wire, strömstrul?

Postat: 13 december 2011, 13:32:23
av v-g
Problemet är ju hur man ska skriva en manual som alla fattar alltid. Jag förstår inte alltid men läser man om några gånger så brukar det framgå vad som menas, det man ska ha i åtanke är att microchip är BRA på manualer! (Dvs det kan vara mycket värre ;) )

Re: PIC och 1wire, strömstrul?

Postat: 13 december 2011, 20:37:51
av Oltronix
Att skriva kort o enkelt är inte alla förunnat. Goda dokumentatörer skall behandlas med respekt. Vissa läsare har falkögon och kommer ihåg alla detaljer andra skummar och ser inte alla detaljer. Det är bra om det finns flera olika ögon o tänkande.

Att välja chip är inte bara HW o instruktioner utan även support. Dokumentation, web, exprimentkort, utvecklingverktyg, exempelkod, många användare, etc är viktiga parametrar för ett val som passar ens behov.