-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: I2C und Interrupteingänge

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98

    I2C und Interrupteingänge

    Anzeige

    Hallo Leute

    ich hab ein paar Fragen:
    1. Wie kann man einen Eingang(INT0), der Interrupt fähig ist als Interrupteingang festlegen.
    2. Bei I2C gibt es ja eine Interruptleitung, kann diese an den oben genannten Interrupteingang angeschlossen werden?
    3. Bei der LCD-Erweiterung wird der oben genannte Pin benutzt kann man dies irgendwie verändern?

    Vielen Dank im vorraus
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Hallo,

    INT0 wird wie Interrupt funktionieren wenn enable bit INT0 in Register GICR activiert (Hoch) wird.
    Mit bits ISC00 und ISC01 in Register MCUCR stellt mann ein auf welchen weise die INT0 eingang ein Interrupt erkannt.

    Bei I2C finde ich kein Interrupt, nur Clock und Data.

    Die LCD-Erweiterung habe ich bis jetzt leider nicht studiert.

    Gruss

    Henk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98
    Hallo Henk,

    könntest du mir ein Beispiel posten? Bei I2C gibt es auch noch eine optionale Interruptleitung.

    mfg liggi
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    i2c hat keinen interrupt, da hat henk schon recht. I2C hat NUR data (SDA) und takt (SCL). du meinst vermutlich den baustein PCF8574(A), die 8bit-Porterweiterung. diese generiert einen interrupt, welcher aber vom I2C vollkommen unabhängig ist.
    kleinschreibung ist cool!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98
    Danke, dann hab ich irgendwas falsch verstanden.

    mfg liggi
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.384
    mahlzeit, ich find das ganz interessant mit dem interrupt

    ich hab mal folgendes versucht

    Code:
    void StartExtInt(void)
    {
    	PORTD &= ~(1 << PD2);	
    	DDRD &= ~(1 << PD2);					// Switches as Input => ext. Int 1
    	MCUCR &= ~((1 << ISC00) | (1 << ISC01));// Low level generates interrupt
    	GICR |= ~(1 << INT0);
    }
    
    void StopExtInt(void)
    {
    	GICR &= ~(1 << INT0);
    	DDRD |= ~(1 << PD2);					// Switches as Input => ext. Int 1
    	PORTD |= ~(1 << PD2);	
    }
    
    // die ISR hab ich in der prog-file angelegt
    
    SIGNAL (SIG_INTERRUPT0)
    {
    	StopExtInt();
    	SerWrite("SIG INT0 Done", 13);
    	StartExtInt();
    }
    meine frage, wäre das in ordnung um den INT0 port als interrupt zu schalten ?
    ausserdem die frage was soll ich mit dem rotanschlus der status LED machen (im Bild mit ? markiert)? muss ich den wegkratzen ? weil wenn ich jetzt CON2 mit VCC überbrücke (mit und ohne widerstand probiert) passiert nix ... aber mein atmega scheint jedesmal neu zu starten wenn ich startswitch(); (ja ich meine startSWITCH()) aufrufe (also der aufruf im interrupt)

    wo liegt mein fehler, was muss ich machen um con2 effektiv nutzen zu können ?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_160.jpg  

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    nicht unbedingt: über die led wird der pin auf low gezogen. wenn du dafür sorgst dass ein HIGH pegel den interrupt auslöst musst du nichts ändern.
    kleinschreibung ist cool!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.384
    und wie mach ihc das ? tut mir leid, SO weit reicht mein wissen nciht, ich hab das nur vom int1 adaptiert, bitte hilf mir >_<

    ausserdem erklärt mir das noch nicht ganz warum es mir immer den IC resettet wenn ich einen taster LOSLASSE!!! (ich hab testhalber ne ausschrift nach dem init() eingebaut die dann immer wieder ausgelöst wird)

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    oh oh das weiss ich auch nicht aus dem kopf...
    aber schau mal ins datenblatt vom meg8
    http://www.atmel.com/dyn/resources/p...ts/doc2486.pdf
    auf seite 67 stet was du wissen musst. hab eben mal nachgesehen, du musst ISC00 und ISC01 auf 1 setzen, dass löst eine steigende flanke den interruot aus.
    kleinschreibung ist cool!

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.384
    heißt ich mach aus

    MCUCR &= ~((1 << ISC00) | (1 << ISC01));// Low level generates interrupt

    MCUCR |= ~((1 << ISC00) | (1 << ISC01));// High level generates interrupt
    ? danke für die hilfen ich teste es mal ^^

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •