Hallo zusammen,
am Arduino Mega habe ich ein I²C Display 2x16 Zeichen so angeschlossen:
Pin 20 und 21 ( SDA und SCL ) wird ja auch von Int 2 und 3 benutzt
1. Frage: ist Interrupt 2 und 3 dann noch verfügbar. Ich gehe mal von aus, dass das nicht möglich ist,
möchte es aber nicht testen, damit ich dort nicht ungewollt etwas beschädige.
2. in der benutzten Lib <LiquidCrystal_I2C.h> sind diese Pin`s vorgegeben. Lässt sich das ändern ?
Also SDA und SCL auf andere Pin's legen ?
Gruss
Ludwig
Interrupt 2 und 3 am MEGA verfügbar ?
Moderatoren: MaxZ, ebastler, SeriousD
-
- Beiträge: 531
- Registriert: Fr 24. Jul 2015, 10:13
- Schule/Uni/Arbeit: KFZ-Elktr.
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 23 Mal
Re: Interrupt 2 und 3 am MEGA verfügbar ?
....ich sehe gerade:
beim UNO. Könnte auch beim MEGA funktionieren ?
....also, die IDE meldet einen Fehler in Wire.begin(D6, D3);
error: 'D6' was not declared in this scope
error: 'D3' was not declared in this scope
Wire.begin(D6, D3);
bzw.
error: no matching function for call to 'TwoWire::begin(int, int)'
usw.
Code: Alles auswählen
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // CHANGE the "0x27" ADRESS FOR YOUR SCREEN CONFIGURATION
void setup()
{
Wire.begin(D6, D3); // SCL > D3 | SDA > D6 | IF IT DOESN'T WORK TRY TO SWITCH TO SCL > D6 | SDA > D3... ( I observed differences with NODEMCU V2 & V3...
lcd.init(); // initialize the lcd
lcd.clear();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("IT WORKS ! :D");
}
void loop()
{
}
....also, die IDE meldet einen Fehler in Wire.begin(D6, D3);
error: 'D6' was not declared in this scope
error: 'D3' was not declared in this scope
Wire.begin(D6, D3);
bzw.
error: no matching function for call to 'TwoWire::begin(int, int)'
usw.
-
- Beiträge: 531
- Registriert: Fr 24. Jul 2015, 10:13
- Schule/Uni/Arbeit: KFZ-Elktr.
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 23 Mal
Re: Interrupt 2 und 3 am MEGA verfügbar ?
....im Arduino -Forum gefunden
...also sind SCA und SCL hardwaremässig festgelegt und können nicht geändert werden. Ist das so ?Die Pins sind hardware-mäßig im Prozessor fest. I2C ist ein Hardware Protokoll. Das hängst vom Board ab an welchen Arduino Pins das ist. Je nachdem welches Board in der IDE ausgewählt wurde, passt das dann entsprechend.
-
- Beiträge: 712
- Registriert: Sa 11. Mai 2013, 15:31
- Spezialgebiet: Kaffee
- Wohnort: Bayern
- Hat sich bedankt: 15 Mal
- Danksagung erhalten: 51 Mal
- Kontaktdaten:
Re: Interrupt 2 und 3 am MEGA verfügbar ?
Servus,
mit dem Controllern selber hab ich noch nichts gemacht Erfahrung hab ich nur mit PIC's. I2C ist aber bei den meisten Controllern so dass die extra Hardware haben weil die zwischen Floating und Pull down umschaltbar sein müssen und nicht zwischen ON und OFF wie beim normalen GPIO. Das betrifft aber nur zwingend die Ausgangsfunktion von den jeweiligen Pins(Als Ausgang kann ein Pin nur von einer Resource verwendet werden) prinzipiell ist es aber möglich dass ein Pin von mehreren Resourcen als Eingang verwendet wird. Ich bin mir jetzt nicht sicher ob der Prozessorinterrupt parallel zum I2C im Master modus funktioniert das Datenblatt ist hier etwas undeutlich(Seite 77(Numerierung der PDF datei)) Im Slave Modus müsstest du den Interrupt bekommen. Ist aber eine ungewöhnliche Konfiguration für einen uC was hast du vor?
lg ferrum
mit dem Controllern selber hab ich noch nichts gemacht Erfahrung hab ich nur mit PIC's. I2C ist aber bei den meisten Controllern so dass die extra Hardware haben weil die zwischen Floating und Pull down umschaltbar sein müssen und nicht zwischen ON und OFF wie beim normalen GPIO. Das betrifft aber nur zwingend die Ausgangsfunktion von den jeweiligen Pins(Als Ausgang kann ein Pin nur von einer Resource verwendet werden) prinzipiell ist es aber möglich dass ein Pin von mehreren Resourcen als Eingang verwendet wird. Ich bin mir jetzt nicht sicher ob der Prozessorinterrupt parallel zum I2C im Master modus funktioniert das Datenblatt ist hier etwas undeutlich(Seite 77(Numerierung der PDF datei)) Im Slave Modus müsstest du den Interrupt bekommen. Ist aber eine ungewöhnliche Konfiguration für einen uC was hast du vor?
lg ferrum
KAFFEE SCHWARZ
-
- Beiträge: 539
- Registriert: Mi 26. Jun 2013, 15:44
- Hat sich bedankt: 33 Mal
- Danksagung erhalten: 81 Mal
- Kontaktdaten:
Re: Interrupt 2 und 3 am MEGA verfügbar ?
Hi,
um es kurz zu halten: Nein, während du an den Pins I²C fährst, kannst du nicht sinnvoll auf einen Interrupt reagieren.
Und ebenfalls: nein, du kannst nicht die I²C Pins an andere legen, da der I2C Transceiver in Hardware umgesetzt ist.
Check dazu einfach die PDF des Arduino Mega (https://store.arduino.cc/arduino-mega-2560-rev3) und vergleiche mit dem Atmel Datenblatt vom Atmega 2560
http://ww1.microchip.com/downloads/en/D ... asheet.pdf
Dort siehst du die möglichen Konfigurationen.
Als Alternative zu den Hardware Interrupts, könntest du aber jeden der vielen anderen Interrupts nehmen. Wie du in den PDFs erkennen kannst, sind viele Pins mit sogenannten PinChange Interrupts belegt, dort kannst du ebenfalls einen Interrupt registrieren, der dann bei einem Levelwechsel triggert. Dazu gibts auch einiges an Beispielen (siehe Pinchange Interrupt Atmega...)
In Kurz: Für einen Pin Change Interrupt suchst du dir den gewünschten Pin raus (z.B. ADC11 / PCINT19), schaust dann im Datenblatt welches PinChange Register dafür zuständig ist (PCMSK2) und setzt dann das Register entsprechend + registrierst die Interrupt-Service-Routine:
Die Arduino Bibliotheken haben standardmäßig keine Unterstützung für die PinChange Interrupts. Es gibt aber glaube ich Bibliotheken dafür. Ansonsten muss man halt mal direkt min den Registern arbeiten.
IMHO hilft es eh sich davon zu lösen, mit "Arduino" zu arbeiten sondern mehr direkt in C/C++ zu machen und Arduino als das zu sehen was es ist, nette kleine Wrapper Funktionen, die die nativen Registern einfacher zugreifbar machen. Auf Kosten der Performance und Funktionalität.
um es kurz zu halten: Nein, während du an den Pins I²C fährst, kannst du nicht sinnvoll auf einen Interrupt reagieren.
Und ebenfalls: nein, du kannst nicht die I²C Pins an andere legen, da der I2C Transceiver in Hardware umgesetzt ist.
Check dazu einfach die PDF des Arduino Mega (https://store.arduino.cc/arduino-mega-2560-rev3) und vergleiche mit dem Atmel Datenblatt vom Atmega 2560
http://ww1.microchip.com/downloads/en/D ... asheet.pdf
Dort siehst du die möglichen Konfigurationen.
Als Alternative zu den Hardware Interrupts, könntest du aber jeden der vielen anderen Interrupts nehmen. Wie du in den PDFs erkennen kannst, sind viele Pins mit sogenannten PinChange Interrupts belegt, dort kannst du ebenfalls einen Interrupt registrieren, der dann bei einem Levelwechsel triggert. Dazu gibts auch einiges an Beispielen (siehe Pinchange Interrupt Atmega...)
In Kurz: Für einen Pin Change Interrupt suchst du dir den gewünschten Pin raus (z.B. ADC11 / PCINT19), schaust dann im Datenblatt welches PinChange Register dafür zuständig ist (PCMSK2) und setzt dann das Register entsprechend + registrierst die Interrupt-Service-Routine:
Code: Alles auswählen
void setup() {
DDRK &= 0b11110111; // Pin ADC11 / PCINT19 als Eingang setzen, geht natürlich auch über pinMode
PORTK |= 0b00001000; // Pin ADC11 / PCINT19 Pullup aktivieren, geht natürlich auch über pinMode
PCMSK2 |= (1 << PCINT19); // PinADC11 / PCINT19 in der PCMSK2 aktivieren (hier gibt es keinen Arduino Befehl dazu)
}
// die ISR für den PCINT2 definieren
ISR(PCINT2_vect) {
// wird ausgeführt, wenn einer der Pins aus dem PCMSK2 seinen Wert ändert
}
Die Arduino Bibliotheken haben standardmäßig keine Unterstützung für die PinChange Interrupts. Es gibt aber glaube ich Bibliotheken dafür. Ansonsten muss man halt mal direkt min den Registern arbeiten.
IMHO hilft es eh sich davon zu lösen, mit "Arduino" zu arbeiten sondern mehr direkt in C/C++ zu machen und Arduino als das zu sehen was es ist, nette kleine Wrapper Funktionen, die die nativen Registern einfacher zugreifbar machen. Auf Kosten der Performance und Funktionalität.
-
- Beiträge: 531
- Registriert: Fr 24. Jul 2015, 10:13
- Schule/Uni/Arbeit: KFZ-Elktr.
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 23 Mal
Re: Interrupt 2 und 3 am MEGA verfügbar ?
Ich habe mit dieser Konfiguration im Moment (noch) nichts vor. Ist also rein vorausschauend aber gut zu wissen, um es für eventuelle Projekte zu berücksichtigen.
Danke
Danke