Interrupt(0) ein und ausschalten

Vielen dank an euch beide. Dann werde ich mich jetzt mal durchs datenblatt wurschteln um herauszufinden wie der interrupt zurückgesetzt wird

zum Thema NewSoftSerial NSS(0,12); der pin 0 wird vom display ja nicht benutzt daher dachte ich das es damit keine probleme geben sollte und mir so nicht noch einen pin belegt.

bis dahin....
Gruß derRobert

jetzt muss ich doch nochmal fragen wo genau ich das datenblatt finde. das datenblatt zum duemilanove enthält diese info ja nicht

oder ist das datenblatt zum controler gemeint?

Danke derRobert

Grüße Uwe

Vielen Dank für den Link,
da bin ich ja für die nächsten Tage beschäftigt :slight_smile:

Öhm...
i blicke da nicht durch.
Kapitel 11 und 12 im Datenblatt
für einen befehl zich verschiedene Adressen und überhaubt was ist das alles????

Ich habe mich doch für Arduino entschieden weil es so "leicht zu erlernen" ist
gibts da irgendwo eine Anleitung wo das schritt für schritt beschrieben ist?

mit dem direkten ansprechen von irgend welchen Adressen hab ich noch null erfahrung

speziell würde mich jetzt interessieren wie ich die wartenden triggersignale löschen kann bevor ich den interrupt wieder einschalte

wenn es dazu etwas (für einsteiger verständliches) zum lesen gibt reicht mir ein link schon.
i möchte nicht wirklich einen fertigen code von euch denn ich wills ja lernen aber das Datenblatt bringt mir mit meinem Kenntnisstand 0 Punkte

Gruß derRobert

Hilft das: AVR-GCC-Tutorial – Mikrocontroller.net?

Ganz allgemein gibt es bei mikrocontroller.net exzellente Anleitungen. Also immer gleich dort schauen. Die Community dort ist ganz allgemein sehr viel versierter und weiter, existiert ja auch schon länger :slight_smile:

Gruß, Udo

Danke auch für diesen Link, kannte ich aber schon.
mein problem besteht darin die AVR codes in der Arduino IDE anzuwenden.
was kann man wie miteinander verbinden?
atacheInterrupt() usw. gibts dort ja nicht. das wird alles gaaaanz anders gemacht. :frowning:

Bin jetzt so weit das man mit GIFR.INTF0 = 1 das anstehende Ereignis am Interrupt(0) löschen kann
aber wie setze ich das in der Arduino IDE um?

Gruß derRobert

Du musst unterscheiden zwischen der IDE und den Libraries. Die IDE ist im weitesten Sinne ein Editor.
Die Libraries stellen zusätzlichen Code bereit wie z.B. AttachInterrupt. Wenn Du wissen willst wie das zusammenpasst solltest Du in den Quelltext der Libraries schauen. Jede Wette, danach geht Dir ein riesen Licht auf.

Vorgehensweise:

  • nachschauen wo die Libraries im Arduino Verzeichnis liegen
  • nachschauen in welcher Library wohl AttachInterrupt liegt
  • den Quelltext durchschauen

Danach ist Dir mit hoher Wahrscheinlichkeit klar wie das zusammenpasst. Insbesondere, daß da gar nichts gaaanz anders gemacht wird. Im Gegenteil, man kann das beliebig mischen. D.h. man kann auch in nicht Arduino Projekten Arduino Libs einbinden und umgekehrt. Zumindest wenn man weiss was man tut. Das Wissen erlangt man meiner Meinung nach am schnellsten mit der oben beschriebenen Vorgehensweise :wink:

Gruß, Udo

guuuuute idee mit den libs das stimmt.

das wir hier nix grundlegend anders machen war mir schon klar aber bei arduino hat sich ebend einer hingesetzt und uns ne menge arbeit abgenommen indem er libs gebaut hat die alles einfach aussehen lassen :wink:

das sich hinter z.B. atacheInterrupt() der ganze kram versteckt den der AVR braucht is klar aber auf die idee ,da mal in den libs zu suchen, bin i ni gekommen :frowning:

Danke derRobert

Die Analyse zeigt, daß die eigentliche Arbeit in der AVR LIBC steckt. Arduino liefert dann nur noch eine weitere Verschalung. Manchmal ist die geschickt und manchmal eher suboptimal. Das wirst Du dann aber demnächst selber herausfinden. Die Libs sind nicht so groß. Bevor man 10 Abhandlungen darüber gelesen hat ist es fast immer schneller mal kurz im Code nachzuschauen.

Wie es so schön heisst "Die Wahrheit liegt im Code" :wink:

Gruß, Udo

fragt mich nicht wie und warum aber EIFR=(1<<INTF0); vor atachInterrupt setzt das Flag zurück.

der Sonntag ist rum und ich hab das Problem gelöst aber ehrlich gesagt hab ich das zusammenspiel noch nicht ganz verstanden. mein heute erworbenes wissen hat geratemal gereicht um google jetzt die richtige frage zu stellen und hier raus zu kommen http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1292970203

schön das dass problem gelöst ist aber verstanden hab ich nur das der befehl ebend die wartenden triggersignale am interrupt(0) mit 1 überschreibt.

aber die schreibweise des Befehls EIFR=(1<<INTF0); passt nun garnicht zu dem was ich heute so alles lesen durfte (GIFR.INTF0 = 1....) :~

Trotzdem danke :expressionless:

derRobert

Naja, das passt schon. Guckst Du hier Low Level Operators and Bit Fields.

Gruß, Udo

Hallo zusammen,

im Zusammenhang mit der "Trigger" Funktion habe ich eine Frage...

Ich habe mir eine einfache Schaltung aufgebaut, die mit einer App gesteuert wird.

Zum Anfang, einfach nur um LEDs aus und einschalten zu können.. Das Funktioniert auch.

Jedoch muss ich bei meiner App für jedes Ereignis ein Feld belegen. Sprich, An=1 Aus=0..

Kann man das so programmieren, dass, wenn 1 empfangen wird für AN und wenn nochmal 1 empfangen wird = Aus?

Oder ist das nicht möglich?

Hintergrund ist einfach nur eine Taste zu haben für 2 Funktionen.

Danke schon mal!

Klar geht das (Pseudocode):

boolean ledStatus = false;

if (Taster) ledStatus = !ledStatus;
digitalWrite(ledPin,ledStatus);

Gruß Tommy

Grundsätzlich ist mit Software alles möglich. Auch Zustandsführung.
Im Detail ist mir aber vollkommen unklar, wovon du redest. Auch ist mir unklar, was deine Frage mit diesem Thema zu tun haben könnte.

Hallo,

ich wollte ungern ein neues Thema auf machen.. Und da hier auch die Trigger Funktion vor kommt.. Dachte ich, machst es am besten hier rein..

Also ich hab folgenden Code zusammengestellt:
char bluetoothagent; //Werte sollen per Bluetooth gesendet werden

void setup(){
Serial.begin(9600); //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
pinMode(13,OUTPUT); //PIN 13 wird als Ausgang festgelegt
pinMode(12,OUTPUT); //PIN 13 wird als Ausgang festgelegt

}

void loop(){
if(Serial.available()) //wenn Daten empfangen werden...
{
bluetoothagent=Serial.read();//..sollen diese ausgelesen werden
}

if (bluetoothagent=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
{
digitalWrite(13,HIGH); //...soll die LED leuchten
}
else if (bluetoothagent=='1') //wenn das Bluetooth Modul „0“ empfängt...
{
digitalWrite(13,LOW); //..soll die LED nicht leuchten

}
if (bluetoothagent=='0') //wenn das Bluetooth Modul eine „2“ empfängt..
{
digitalWrite(12,HIGH); //...soll die LED leuchten

}
else if (bluetoothagent=='0') //wenn das Bluetooth Modul „0“ empfängt...
{
digitalWrite(12,LOW); //..soll die LED nicht leuchten

Jetzt will ich es eben so haben: Das wenn man 0 sendet, die LED an geht, und wenn man nochmal 0 sendet, die LED aus geht. Geht das?

Im Moment muss ich quasi jeder LED 2 Zustände übermitteln.. Einmal ein und wieder aus.. Z. B. durch 0 und 1; 2 und 3; usw..

Versteht man jetzt, was ich meine?

Vielen Dank schon mal.

Ich habe Dir doch schon geschrieben, wie es geht.
Setze Deinen Sketch bitte in Codetags (</> oben links im Forumseditor).

Gruß Tommy

Hallo Tommy,

ja hab ich gelesen.. Allerdings bekomme ich es nicht zum laufen.. Weiß nicht, was ich falsch mache.

fusinoco:
Hallo,

ich wollte ungern ein neues Thema auf machen.. Und da hier auch die Trigger Funktion vor kommt......

Versteht man jetzt, was ich meine?
......

Wir verstehen dich schon, du scheinbar die Antworten nicht.

Und das Thema hier ist Interrupt0 und nicht Trigger.
Damit vermischst du die Themen.