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