Guest Posted July 14, 2019 Share Posted July 14, 2019 (edited) Arduino UNO Am nevoie sa inlocuiesc pentru a salva timp, digitalRead(A3) cu o citire din PINC sau PORTC care credeti ca e mai potrivita pentru citire mai rapida. As vrea un exemplu. Edited July 14, 2019 by Guest Link to comment
nico_2010 Posted July 15, 2019 Share Posted July 15, 2019 temp = PINC & 0x01; //ignora tot, mai putin pinul 1 if (temp == 0x00) //daca butonul de pe pin 1 este actionat fa ceva. Nota: butonul este conectat intre pinul 1 si GND. Era suficient sa citesti foaia de catalog la sectiunea "Porturi", dar iti este mai comod sa faci ca altii sa-si piarda timpul pentru ceva banal. Link to comment
Guest Posted July 15, 2019 Share Posted July 15, 2019 (edited) inainte sa postez am cautat prin manual dar nu prea m-am lamurit. eu am incercat asa fara succes, codul postat nu l-am incercat inca pentru ca nu am aici un arduino ISR (PCINT1_vect) { //partea care conteaza aici if ((PINC&0b0001000) == 0x01) { i++; } } codul postat din ce am inteles eu in ds nu ar trebuii sa fie ? temp = PINC & 0x03; //ignora tot, mai putin A3 if (temp == 0x01) //daca butonul de pe pin A3 este actionat fa ceva. Edited July 15, 2019 by Guest Link to comment
nico_2010 Posted July 15, 2019 Share Posted July 15, 2019 0 & 1 = 0 1 & 1 = 1 temp = PINC & 0x01; //ignora tot, mai putin pinul 1 if (temp == 0x00) //daca butonul de pe pin 1 este actionat fa ceva Nota: butonul este conectat intre pinul 1 si GND. In alta ordine de idei, ca sa folosesti intreruperile asignate schimbarii starii pinilor (PCINT) ai activat vreunul din bitii PCIEx din registrul PCICR, si daca da, care anume? Pentru exemplul dat de mine, daca vrei sa activezi intreruperea aferenta PINC.1, trebuie sa activezi PCIE1 si, in continuare sa activezi bitul PCINT9 din registrul PCMSK1. Un exemplu pentru utilizarea PINB.0, 1 si 2 pentru generarea de intrerupere: DDRB=0b11111000; PORTB=0b00000111; /* in main, inainte de a activa intreruperile cu sei() */ PCICR = (1<<PCIE0); PCMSK0 = (1<<PCINT2)|(1<<PCINT1)|(1<<PCINT0); /*------*/ if ((PINB & (1<<PINB2))==0) { fa ceva ... } if ((PINB &(1<<PINB1)) == 0) { fa altceva ... } if ((PINB &(1<<PINB0)) == 0) { fa cu totul si cu totul altceva } Link to comment
Guest Posted July 15, 2019 Share Posted July 15, 2019 void setup(){ SetupISR(A3); } void SetupISR(byte pin) { *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); PCIFR |= bit (digitalPinToPCICRbit(pin)); PCICR |= bit (digitalPinToPCICRbit(pin)); } ISR (PCINT1_vect) { // } Link to comment
nico_2010 Posted July 15, 2019 Share Posted July 15, 2019 Asta este luata din librariile Arduino! Nu ofera prea multe clarificari la intrebarile puse. Mergi pe varianta oferita mai sus. Link to comment
nico_2010 Posted July 15, 2019 Share Posted July 15, 2019 Sau foloseste linia de cod de mai jos: attachInterrupt (digitalPinToInterrupt(pin), ISR, mode) Cum se foloseste citeste aici: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/ Link to comment
Guest Posted July 15, 2019 Share Posted July 15, 2019 ma va ajuta oare attachInterrupt () pentru A3 ?... o sa incerc varianta de declarare intreruperi diferita sa vad. Link to comment
nico_2010 Posted July 15, 2019 Share Posted July 15, 2019 (edited) Ar trebui sa sa functioneze, daca respecti ceea ce este scris in link-ul postat mai sus. A3 este PINC.3 . Edited July 15, 2019 by nico_2010 Link to comment
Guest Posted July 15, 2019 Share Posted July 15, 2019 a mers cu volatile int iX = 0; void setup(){ SetupISR(A3); /* sau cli(); PCICR |= 0x02; PCMSK1 = 0b0001000; sei(); */ } void SetupISR(byte pin) { *digitalPinToPCMSK(pin) |= bit (digitalPinToPCMSKbit(pin)); PCIFR |= bit (digitalPinToPCICRbit(pin)); PCICR |= bit (digitalPinToPCICRbit(pin)); } ISR (PCINT1_vect) { if (((PINC>>0x03) & 1) == 0x01) iX++; } Link to comment
nico_2010 Posted July 16, 2019 Share Posted July 16, 2019 Acum 9 ore, Aw Genetix a spus: ISR (PCINT1_vect) { if (((PINC>>0x03) & 1) == 0x01) iX++; } Esti sigur ca este corect ceea ce am bolduit? Butonul este conectat intre +5V si pinul A3, cu rezistenta la masa? Link to comment
Guest Posted July 16, 2019 Share Posted July 16, 2019 da, fireste. aveam deja cablajul facut in configuratia asta pe pin A3... de asta trebuia asa. nu stiu cat e de corect, dar merge bine. pe osciloscop e ok. fac detecție la zero cross acolo. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now