mektek 0 Posted November 13, 2012 Share Posted November 13, 2012 digitalWrite(12, LOW); digitalWrite(10, LOW); digitalWrite(8, LOW); digitalWrite(6, LOW); Is there a way to combine these four commands in one command? thanks in advance Quote Link to post Share on other sites
energia 484 Posted November 14, 2012 Share Posted November 14, 2012 You could if you would use pin 9 instead of 6. We will have to get into the nitty gritty details of port registers though. The idea is that the pins you want to control at the same time are on the same port. In this case P2. Assuming that you do a pinMode(xxx, OUTPUT) on all your pins in setup then you can do the following to set all pins at once. First let's figure out which port bits are associated with the pins. If you use pin 8, 9, 10 and 12 then: 8 = P2.0 = bit 0 = 1 < 0 9 = P2.1 = bit 1 = 1 < 1 10 = P2.2 = bit 2 = 1 < 2 12 = P2.4 = bit 4 = 1 < 4 To set all bits at once you would do: P2OUT |= (1 < 0) | (1 < 1) | (1 < 2) | (1 < 4); to clear all bits at once you would do: P2OUT &= ~((1 < 0) | (1 < 1) | (1 < 2) | (1 < 4)); In your loop() it would look something like this. loop() { /* Turn all LED's on */ P2OUT |= (1 < 0) | (1 < 1) | (1 < 2) | (1 < 4); delay(500); /* Turn all LED's off */ P2OUT &= ~((1 < 0) | (1 < 1) | (1 < 2) | (1 < 4)); delay(500); } abecedarian and mektek 2 Quote Link to post Share on other sites
oscarl1718 0 Posted November 28, 2012 Share Posted November 28, 2012 I am doind a DC-AC inverter, and i need to toggle two pins at the same time, but i need a 1us accuracy, but for example, there is a 3us delay between a HIGH and a LOW for Q1 and Q2, thar are always complementary. This is my code: //Primer semiciclo //2)Q1 y Q4 digitalWrite(Q2,LOW); digitalWrite(Q3,LOW); //Q2 y Q3 apagado //delayMicroseconds(td); //Tiempo muerto digitalWrite(Q1,HIGH); digitalWrite(Q4,HIGH); //Q1 y Q4 ENCENDIDO delayMicroseconds(duty); //Duracion del semiciclo (T/4) //1)Q2 y Q4 digitalWrite(Q3,LOW); digitalWrite(Q1,LOW); //Q1 y Q3 apagado //delayMicroseconds(td); //Tiempo muerto digitalWrite(Q4,HIGH); digitalWrite(Q2,HIGH); //Q4 y Q2 ENCENDIDO delayMicroseconds(tr-duty); //Duracion del semiciclo (T/4) //Segundo semiciclo //2)Q1 y Q4 digitalWrite(Q2,LOW); digitalWrite(Q3,LOW); //Q2 y Q3 apagado //delayMicroseconds(td); //Tiempo muerto digitalWrite(Q1,HIGH); digitalWrite(Q4,HIGH); //Q1 y Q4 ENCENDIDO delayMicroseconds(duty); //3)Q2 y Q4 digitalWrite(Q3,LOW);digitalWrite(Q1,LOW); //Q1 y Q3 apagado //delayMicroseconds(td); //Tiempo muerto digitalWrite(Q4,HIGH);digitalWrite(Q2,HIGH); //Q2 y Q4 ENCENDIDO delayMicroseconds(tr-duty); //Duracion del semiciclo (T/4) is there any chance to get a better response time? maybe with some modification like you suggested in this post? i mean... is faster to set and clear this bits in this way than if i use digitalWrite? Thanks a lot for your Help. Quote Link to post Share on other sites
jsolarski 94 Posted November 29, 2012 Share Posted November 29, 2012 Yes you can get faster results but you either have to code it in C and interface with the registers directly I.E. P1OUT |= bit1+ bit2 or P1OUT &= ~bit1 + bit2 the other option is code it in assembly oscarl1718 1 Quote Link to post Share on other sites
oscarl1718 0 Posted November 29, 2012 Share Posted November 29, 2012 Yes!! this is just what i was needing... thanks a lot for your help. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.