Interrupt 2 und 3 am MEGA verfügbar ?

Programmierung und Hardwaredesign mit Arduino, AVR, PIC und Konsorten.

Moderatoren: MaxZ, ebastler, SeriousD

Antworten
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

Interrupt 2 und 3 am MEGA verfügbar ?

Beitrag von L_B_S »

Hallo zusammen,

am Arduino Mega habe ich ein I²C Display 2x16 Zeichen so angeschlossen:
Anschluss.png
Anschluss.png (15.3 KiB) 1900 mal betrachtet
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
Benutzeravatar

Thread-Ersteller
L_B_S
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 ?

Beitrag von L_B_S »

....ich sehe gerade:

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()
{
}
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.
Benutzeravatar

Thread-Ersteller
L_B_S
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 ?

Beitrag von L_B_S »

....im Arduino -Forum gefunden
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.
...also sind SCA und SCL hardwaremässig festgelegt und können nicht geändert werden. Ist das so ?
Benutzeravatar

ferrum
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 ?

Beitrag von ferrum »

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
KAFFEE SCHWARZ
Benutzeravatar

Heisath
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 ?

Beitrag von Heisath »

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:

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.
Benutzeravatar

Thread-Ersteller
L_B_S
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 ?

Beitrag von L_B_S »

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
Antworten