-
        

Ergebnis 1 bis 5 von 5

Thema: AT90USB1287 Interrupt

  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9

    AT90USB1287 Interrupt

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo Forum,

    ich will gerade die Interrupts von meinem AT90USBKey verwenden und habe mir Testweise ein Programm geschrieben, was mir eine Meldung ausgibt wenn ein Interrupt aktiviert wurde.
    Im Moment löse ich die Interrupts über den verbauten Joystick aus, aber nach einer bestimmten Anzahl an Interrupts reagiert der Mikrocontroller nicht mehr. Die Anzahl ist dabei aber immer Unterschiedlich...
    Weiß jemand woran das liegen kann?

    Mein Code ist folgender;
    Code:
    /*
     * Interrupt.c
     *
     * Created: 20.02.2014 07:15:06
     *  Author: Daniel.KAmpert
     */ 
    
    
    #include <stdlib.h>
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "uart.h"
    
    
    void Setup(void);
    
    
    ISR(INT4_vect)
    {
    	uart_puts("INT4 Interrupt!\n\r");
    }
    
    
    ISR(INT5_vect)
    {
    	uart_puts("INT5 Interrupt!\n\r");
    }
    
    
    int main()
    {
    	Setup();
    
    
    	for (;;)
    	{
    		
    	}
    }
    
    
    void Setup(void)
    {
    	// UART initialisieren
    	uart_init(UART_BAUD_SELECT(57600, 8000000)); 
    	
    	// IO als Ausgang einstellen
    	DDRE &= (0<<DDE4) & (0<<DDE5);
    	
    	// Pull-up Widerstände einschalten
    	PORTE |= (1<<PE4) | (1<<PE5);
    	
    	// Interrupt bei fallender Flanke
    	EICRB = (1<<ISC41) | (0<<ISC40) | (1<<ISC41) | (0<<ISC40);
    	
    	// Interrupts aktivieren
    	EIMSK = (1<<INT4) | (1<<INT5);
    	
    	// Globale Interrupts freigeben
    	sei();
    }
    Danke für die Hilfe!
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Kampi
    Weiß jemand woran das liegen kann?
    Vermutlich daran, dass du eine UART-Lib verwendest, die mit einem Puffer und Interrupt gesteuertem Senden arbeitet (Fleury?).
    MfG
    Stefan

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Zitat Zitat von sternst Beitrag anzeigen
    Vermutlich daran, dass du eine UART-Lib verwendest, die mit einem Puffer und Interrupt gesteuertem Senden arbeitet (Fleury?).
    Ja genau die verwende ich.
    Aber müsste der Controller dann nicht wieder einsteigen?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Kampi Beitrag anzeigen
    Ja genau die verwende ich.
    Aber müsste der Controller dann nicht wieder einsteigen?
    Was passiert, wenn im Puffer nicht mehr genug Platz für den zu sendenden String ist? Dann wartet die Lib bis wieder Platz ist. Da du aber aus einem Interrupt heraus sendest, sind Interrupts zu diesem Zeitpunkt deaktiviert.
    Keine Interrupts -> kein Senden aus dem Puffer -> kein Platz im Puffer wird frei -> Warten für immer
    MfG
    Stefan

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    mmh super. Dann muss ich mir mal eine Lösung basteln...eventuell ohne Interrupt, weil das Senden sowieso nicht Zeitkritisch ist.
    Hab es gestern dann auch mal mit einer LED verwenden. Da klappt es problemlos, von daher scheint das wirklich das Problem zu sein.
    Vielen Dank für die Hilfe
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. AT90USB1287 mit Nutzung von USB und UART mit 460800 Baud
    Von uffi im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 14.07.2008, 10:35
  2. SRAM an AVR Controller (z.B. an AT90USB1287)
    Von uffi im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 13.07.2008, 19:30
  3. Unterstützt Evertool den AT90USB1287?
    Von Dr_Alban im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 22.11.2007, 19:31
  4. AT90USB1287 und Beispielprogramm CDC (UART --> USB-UART)
    Von Bumbum im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 15.11.2006, 13:30
  5. PC und AT90USB1287 über USB Verbinden
    Von Tobias82 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 09.09.2006, 01:46

Berechtigungen

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