Hallo medetweakers,
Voor mijn project van school moeten we een Digital-Analog-Converter maken. Met deze DAC moeten we 2 verschillende signalen maken, een 'huis' vormig signaal en een gewone 'sinus' signaal. Dit is allemaal prima gelukt, maar nu moeten we nog tussen deze 2 signalen kunnen switchen. Ik heb dus nu 2 aparte codes met een van het huis en een van de sinus. Hierin gebruiken we ook al portmanipulation. Ik weet wel hoe dat werkt. We hebben al onze bits ( 0 tot 256 ) uitgerekend en de arduino maakt daar een binaire code van. Die binaire code staat dan weer voor de poorten die aan (1) of uit (0) staan.
Maar om weer verder te gaan naar de switch werken we dus in deze codes met microsecondes, dus kunnen we helaas niet switchen met 'digitalRead', want dat is te langzaam. Hiervoor moeten we dus Portmanipulation gebruiken, echter krijg ik het niet voor elkaar ( ben er nog geen ster in
). Om onze DAC aan te sturen gebruiken we digital pins 0 tot 7 al , dus wou ik graag switchen op een van de poorten van 8 tot 13.
informatie:
B (digital pin 8 to 13)
C (analog input pins)
D (digital pins 0 to 7)
PORTD maps to Arduino digital pins 0 to 7
DDRD - The Port D Data Direction Register - read/write
PORTD - The Port D Data Register - read/write
PIND - The Port D Input Pins Register - read only
PORTB maps to Arduino digital pins 8 to 13 The two high bits (6 & 7) map to the crystal pins and are not usable
DDRB - The Port B Data Direction Register - read/write
PORTB - The Port B Data Register - read/write
PINB - The Port B Input Pins Register - read only
PORTC maps to Arduino analog pins 0 to 5. Pins 6 & 7 are only accessible on the Arduino Mini
DDRC - The Port C Data Direction Register - read/write
PORTC - The Port C Data Register - read/write
PINC - The Port C Input Pins Register - read only
https://www.arduino.cc/en/Reference/PortManipulation <-- site
Ik heb geprobeerd om een kleine code te maken, waar die met portmanipulation switched. zie hier onder
Ik dacht dus; eerst moet ik poorten 9 en 10 ( waar ik op switch ) aangeven dat het het inputs zijn en daarna kan ik daar een if statement van maken. Als 9 hoog is, doe dan dit. Maar dit werkt dus niet.
void setup() {
// put your setup code here, to run once:
DDRB = B00000000; // sets all pins to inputs
}
void loop() {
if (PINB == B00000100) { //9
digitalWrite(2, HIGH);
}
if (PINB == B00001000) { //10
digitalWrite(3, HIGH);
}
}
De code klopt dus niet, dat weet ik, maar dan hebben jullie een beetje een ideetje hoe het moet zijn.
Ohja waar die digitalWrite staat, moet dus die code van het huis signaal en de sinus signaal staan.
Ik hoop dat jullie me kunnen helpen met dit en mij het portmanipulation wat beter kunnen uitleggen.
Alvast bedankt !
met vriendelijke groeten,
Dennis,
Voor mijn project van school moeten we een Digital-Analog-Converter maken. Met deze DAC moeten we 2 verschillende signalen maken, een 'huis' vormig signaal en een gewone 'sinus' signaal. Dit is allemaal prima gelukt, maar nu moeten we nog tussen deze 2 signalen kunnen switchen. Ik heb dus nu 2 aparte codes met een van het huis en een van de sinus. Hierin gebruiken we ook al portmanipulation. Ik weet wel hoe dat werkt. We hebben al onze bits ( 0 tot 256 ) uitgerekend en de arduino maakt daar een binaire code van. Die binaire code staat dan weer voor de poorten die aan (1) of uit (0) staan.
Maar om weer verder te gaan naar de switch werken we dus in deze codes met microsecondes, dus kunnen we helaas niet switchen met 'digitalRead', want dat is te langzaam. Hiervoor moeten we dus Portmanipulation gebruiken, echter krijg ik het niet voor elkaar ( ben er nog geen ster in
informatie:
B (digital pin 8 to 13)
C (analog input pins)
D (digital pins 0 to 7)
PORTD maps to Arduino digital pins 0 to 7
DDRD - The Port D Data Direction Register - read/write
PORTD - The Port D Data Register - read/write
PIND - The Port D Input Pins Register - read only
PORTB maps to Arduino digital pins 8 to 13 The two high bits (6 & 7) map to the crystal pins and are not usable
DDRB - The Port B Data Direction Register - read/write
PORTB - The Port B Data Register - read/write
PINB - The Port B Input Pins Register - read only
PORTC maps to Arduino analog pins 0 to 5. Pins 6 & 7 are only accessible on the Arduino Mini
DDRC - The Port C Data Direction Register - read/write
PORTC - The Port C Data Register - read/write
PINC - The Port C Input Pins Register - read only
https://www.arduino.cc/en/Reference/PortManipulation <-- site
Ik heb geprobeerd om een kleine code te maken, waar die met portmanipulation switched. zie hier onder
Ik dacht dus; eerst moet ik poorten 9 en 10 ( waar ik op switch ) aangeven dat het het inputs zijn en daarna kan ik daar een if statement van maken. Als 9 hoog is, doe dan dit. Maar dit werkt dus niet.
void setup() {
// put your setup code here, to run once:
DDRB = B00000000; // sets all pins to inputs
}
void loop() {
if (PINB == B00000100) { //9
digitalWrite(2, HIGH);
}
if (PINB == B00001000) { //10
digitalWrite(3, HIGH);
}
}
De code klopt dus niet, dat weet ik, maar dan hebben jullie een beetje een ideetje hoe het moet zijn.
Ohja waar die digitalWrite staat, moet dus die code van het huis signaal en de sinus signaal staan.
Ik hoop dat jullie me kunnen helpen met dit en mij het portmanipulation wat beter kunnen uitleggen.
Alvast bedankt !
met vriendelijke groeten,
Dennis,
A man who doesn't know to stop his electronics madness