Ik ben weer na twee jaar niks met PICs gedaan te hebben weer begonnen. weer van voor af aan en ik snap even niet
hoe de bitwise output operaties zouden moeten werken.
Dus ik dacht simpel beginnen . Even wat bitwise operaties op de output. Tot mijn verbazing zie ik dat de iedere keer als ik een bit set van een port dat de andere gereset worden. Zo wordt in het onderste voorbeeld de LCD_ENABLE iedere keer kort naar nul terug gezet. Is dit normaal en is dit te voorkomen met het gebruik van bit operaties ?

                                                                                                                           
#include <p18f458.h> 
#include <delays.h>

#define LCD_ENABLE   	 PORTDbits.RD2
#define LCD_DATA_COMMAND PORTDbits.RD3
#define LCD_READ_WRITE   PORTDbits.RD4

#define LCD_CS1          PORTDbits.RD5
#define LCD_CS2          PORTDbits.RD6
#define LCD_INV_RESET    PORTDbits.RD7 

# pragma config OSC = HS     
 
void main (void)
{
	TRISD = 0x00;

	while(1)	
        {
	   /* write data& */
	   LCD_ENABLE = 1;	
	   LCD_READ_WRITE = 0;
	   LCD_READ_WRITE = 1;
        }    
}

[Bericht gewijzigd door Henry S. op (1%)]

Is dit normaal en is dit te voorkomen met het gebruik van bit operaties ?

Is waarschijnlijk het R-M-W effect. Te voorkomen door LATD te gebruiken i.p.v. PORTD bij output operaties.

Bedankt werkt perfect, dit had me wel wat uurtjes gekost als ik dit zelf had moeten vinden

Bart,

Ik begrijp trouwens dat je een LCD wilt gaan aansturen? Ik hoop dat je niet de delay's vergeet ;-)

Er staat een leuke uitleg in de reference manual van de pic24H

[quote]When the first BSET instruction is executed, it writes a ‘1’ to bit 0 in the PORTA register, which
causes the voltage level to start rising to logic level 1 on pin 0 (refer to Step 1 in Figure 10-2).
However, if the second BSET instruction is executed before the voltage level on pin 0 has
reached the threshold for logic 1 (refer to Step 3 in Figure 10-2), the second BSET
(read-modified-write) instruction reads ‘0’ for bit 0, which it writes back into PORTA register (refer
to Step 2 in Figure 10-2). In other words, instead of reading a value of 0x0001 from the PORTA
register, it reads a value of 0x0000, modifies it to 0x0002 (instead of desired value of 0x0003),
and writes that value back to the PORTA register. This causes the voltage on pin 0 to start falling
to logic 0 and the voltage on pin 1 to start rising to logic 1 (refer to Step 4 in Figure 10-2).[/quote]

http://ww1.microchip.com/downloads/en/DeviceDoc/70230C.pdf

zie pagina 3.

Zal vast ook wel in de andere datasheets/reference manuals staan. Maar deze heb weet ik toevallig :P

Ja, ik ben met het aan sturen van een LCD bezig. Ik heb met de scope gekeken en als ik op een volgend aan en uit zet van 1 bit, kom ik al boven de minimale timing uit (van een s6B0108 ). Ik zit op het moment op een 16Mhz cristal
Ik heb het eindelijk voor elkaar dat er iets op het scherm veranderd, de on/off functie werkte niet :-)

Maar ik loop nu tegen het probleem aan dat ik maar 1 bank CS1 of CS2 kan schrijven in 1 run, als ik het omzet naar de andere bank lijkt hij toch weer de zelfde te schrijven. Als ik begin in de anderen doet hij dat wel netjes. Morgen weer verder.

Bedankt voor de ref , zal het eens door nemen.

Bart

Die manual is vooral voor de pic24H reeks, maar de IO poorten zijn bij de meeste PIC's wel het zelfde (Op open-drain support na bijvoorbeeld)