This is how I do it: The C-code: portD ^= 0x03; The generated assembler: movlw 3 xorwf H'F83' So, I was already using his samplecode. PortD is never read. Marcel ----- Original Message ----- From: "M. Adam Davis" To: Sent: Friday, November 21, 2003 3:41 PM Subject: Re: [PIC]: Can PIC-pins handle this? > How are you switching them? Do you ever read from the pins? If so, the > value you are reading is very likely not correct. > > The suggestion is not that you switch them in one instruction, it's that > you don't ever read from them and trust the read value. I would use his > code and try it out (writing decimal values to the port) and see if that > fixes the problem. > > -Adam > > Marcel van Lieshout wrote: > > >I am switching them already in one instruction. When I look at the scope > >with no Transmitter attached, the signal looks good. Vtt = 10V, freq. 40Khz, > >Duty 50%. My question was releated to the behaviour of the > >"single-instruction-toggle" with the transmitter attached. > > > > > >----- Original Message ----- > >From: "Mike Harrison" > >To: > >Sent: Friday, November 21, 2003 3:02 PM > >Subject: Re: [PIC]: Can PIC-pins handle this? > > > > > >On Fri, 21 Nov 2003 14:26:00 +0100, you wrote: > > > > > > > >>New to PIC's and not having a degree in electronics, I have a question: > >> > >>I want to drive an ultrasound transmitter (pikzo, 40 kHz) directly from > >> > >> > >picpins. I tested this using the PWM on a 877A. The transmitter is connected > >between the pwm-output and Vdd. This produces a very good ultrasound > >sinewave. > > > > > >>Next, to increase the transmitter's output, I connected the transmitter > >> > >> > >between RD0 and RD1 on a 18F452 running at 40Mhz and wrote some code to > >generate a 40kHz block. I toggle both pic-pins in a single cycle in an > >attempt to create a pure wave as much as possible. This means that one pin > >goes from sinking to sourcing and the other pin going from sourcing to > >sinking in a single 100ns cycle. This did not work a I expected. After some > >more experimenting using the scope, I came with the following explanation: > > > > > >>What I am doing asks to much from the pins as pin switching-times for > >> > >> > >sourcing to sinking is not equal to the time from sinking to sourcing. > >Furthermore, the timings on the pins are not necessarily equal on both pins > >(probably they are not). This results in effectivily shorting Vdd to Vss for > >a very brief moment through both pin-drivers. > > > > > >>Is this assumption correct? What timing should I use to do the toggling > >> > >> > >safely? Is seperating the toggle into two instructions enough? > > > >This is probably not working as the capacitance of the transducer is causing > >read-modify-write > >problems, i.e. when you write the second pin, the first has not reached its > >intended state, so the > >wrong value is read and written back. > > > >A simple solution is to switch bith pins simultaneously in one instruction, > >either : > > > > movlw 1 ; setup > > movwf portd > >loop > > movlw 3 > > xorwf portd ; this will invert both pins > > > > > >or > > > >loop > > movlw 1 > > movwf portd > > > > movlw 2 > > movwf portd > > > > > >The former method has the advantage that it is easier to guarantee a 50% > >duty cycle, which can be > >important for some types of piezo transducer > > > >-- > >http://www.piclist.com#nomail Going offline? Don't AutoReply us! > >email listserv@mitvma.mit.edu with SET PICList DIGEST in the body > > > >-- > >http://www.piclist.com#nomail Going offline? Don't AutoReply us! > >email listserv@mitvma.mit.edu with SET PICList DIGEST in the body > > > > > > > > > > > > -- > http://www.piclist.com#nomail Going offline? Don't AutoReply us! > email listserv@mitvma.mit.edu with SET PICList DIGEST in the body > -- http://www.piclist.com#nomail Going offline? Don't AutoReply us! email listserv@mitvma.mit.edu with SET PICList DIGEST in the body