- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: eingang an M32

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    Anzeige

    Praxistest und DIY Projekte
    ... Habe die Programme jetzt ausprobiert

    @KingTobi
    Das Programm von dir funktioniert ... zumindest bei mir

    das Programm (hab ich schon mal gepostet)
    Code:
    int main(void) 
    { 
        initRP6Control(); 
    
        while(true) 
    	{ 
    	DDRC &= ~IO_PC6; 
    		if(PINC & IO_PC6) 
    		{ 
    		writeString_P("PC6 is HIGH!\n"); 
    		} 
    		else 
    		{ 
    		writeString_P("PC6 is LOW!\n"); 
    		} 
    	} 
        return 0; 
    }
    funktioniert einwandfrei

    ... dann muss es bei dir an etwas anderem liegen



    Hast du die neueste Version des RP6Loader ?
    http://www.arexx.com/rp6/html/de/software.htm

    edit:
    @ KingTobi
    Normalerweise dürfte es doch keinen Unterschied machen, ob man die Programme selbst kompiliert oder die fertigen hexfiles verwendet.
    Hab das auch gerade probiert ... das macht (bei mir) überhaupt keinen Unterschied.

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Hätte mich auch gewundert wenns nicht geht!
    Dann wird beim Compilieren was falsch laufen

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    Noch ne Idee:

    Vl hast du die Ordnerstrukturen nicht richtig angelegt?

    Du musst den Ordner mit den Beispielprogrammen an irgendeinen Ort auf der Festplatte kopieren und IN DIESEN Ordner kannst du dann einen neuen Ordner erstellen, indem du dann ein Projekt erstellst (mit Makefile und so).

    BSP:
    ...\RP6Control_Examples\LCD\ und das sind dann alle Daten des Projekt drin
    nämlich (z.B.):
    lcd.c
    lcd_p.pnprog
    makefile
    make_all.bat
    make_clean.bat
    und ev. lcd_p.pnps

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2010
    Beiträge
    11
    @KingTobi: ich habe das hexfile des beispielprogramm direkt genommen und es nicht nochmal extra kompiliert.

    aber das bei mir grundsätzlich was beim kompilieren falsch läuft, kann ich ausschließen, da ich schon andere ordner erstellt habe und darin programme erstellt habe, welche auch korrekt liefen.

    das am RP6Loader was nicht stimmt, kann ich daher auch ausschließen.

    @Xandi11: wie ich das mit den ordner gemacht habe, habe ich in einem meiner letzten post schon ausführlich erklärt, aber ich glaube ich habe es genauso gemacht, wie du es mir hier erklärt hast.

    was aber durchaus ein grund sein könnte, ist das, das irgendwas in genau diesem verzeichnis falsch kompiliert, wird, da irgendwelche orderdateien nicht korrekt sind.

    das hier sind alle dateien in diesem ordner:

    - Testprogramm_C (C-datei)
    - make_all (einfach aus button-beispielprogramm kopiert)
    -makefile(von buttons-beispielprogramm kopiert, bei target auf Testprogramm_C abgeändert)
    - make clean(von buttons- beipsielprogramm kopiert)
    - .dep ->Testprogramm_C.o.d.
    - Testprogramm_C.elf
    - Testprogramm_C.lss
    - Testprogramm_C.map
    - Testprogramm_C (Sym- datei)
    - Testprogramm_C (hex.datei)
    - Testprogramm_C.lst
    - Testprogramm_C.o (O- datei)


    leider kann ich gerade keiner eurer vorschläge ausprobieren, da ich erst am freitag wieder heim komme.

    was mir jetzt gerade noch einfällt und evtl. wichtig sein könnte ist, dass ich den timer 1 auf 36khz CTC modus mit interrupt zur verwendung eines ir- kollisionssystems initialisiert habe. das sah folgendermaßen aus:



    Code:
    #include "RP6ControlLib.h"
    
    
    uint8_t counter;
    
    
    ISR(TIMER1_COMPA_vect) 
      
      {counter++;
      
    if(counter <21)
      {PORTD ^= (1<<PD5);
      writeString_P("Interrupt Timer1 Compare\n");}
    
    if(counter > 20 && interruptcounter <41)
      {writeString_P("Interrupt Pause\n");}
    
    if(counter == 41)
      {counter =0;}
      
    
    
    }
    
    
    
    
    
    void infrarotempfang(void)
    {if (PINC & (1<<6))
    
    
    
      {writeString_P("Infrarot empfangen\n");
      }
      
    
    }
    
    int main(void)
    {initRP6Control();
    
    DDRD |= (1<<PD5);  //PD5 als Ausgang
    
    DDRC &=~ (1<<6);    //PC6 als Eingang
    
    while(true)
    {
    
    infrarotempfang();
    }
    return 0;
    }
    timerinitialisierung:

    Code:
    	 TCCR1B =  (0 << ICNC1)
             | (0 << ICES1)
             | (0 << WGM13)
             | (1 << WGM12)
             | (0 << CS12)
             | (0 << CS11)
             | (1 << CS10);
    
    	 OCR1A = 221; 
    	
    
    
    	// Timer 2 - used for beeper:
    	TCCR2 =  0; 
    	OCR2  = 0xFF; 
    
    	// Enable timer interrupts:
    	TIMSK =   (1 << OCIE0)|(1<<OCIE1A);
    	sei();
    dieses programm hatte ich auch im Testprogramm_C ordner und bei diesem programm kamen alle textmeldungen des interrupts korrekt. nur die textmeldung am eingang kam nicht.

    deshalb habe ich das programm anschließend abgeändert (ohne interrupt) um dem problem mit der eingangstextmeldung genauer auf den grund zu gehen.

    alles ein bischen verwirrend, z.b. auch, warum das ganz einfache programm von KingTobi mit der Textmeldung jetzt auch keine textmeldung bringt.

    vielleicht kann mir ja jetzt jemand entscheidend weiterhelfen.
    danke auf jeden fall schon jetzt mal für euer großes bemühen.

    mfg

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    Ich versteh jetzt nicht ganz was dein Programm mit der Interruptroutine mit dem Problem, dass du keine Textausgaben bekommst zu tun hat.

    Edit:

    dieses programm hatte ich auch im Testprogramm_C ordner
    Du könntest versuchen einfach alles neu zu machen.
    Nimm einfach nur mal den Code von KingTobi (der mit der Endlosschleife) und erstell einen ganz neuen Ordner, Projekt usw.
    Dann könntest du auch ausschließen, dass es eine Verknüpfung mit deinem früheren Programm gibt.

    Ich glaube allerdings, dass das nicht ändern wird ... aber nen Versuch ist allemal wert.

    lg

  6. #26
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2010
    Beiträge
    11
    danke Xandi für den tipp, ich werde es am freitag wenn ich wieder daheim bin ausprobieren.

    bis dann

  7. #27
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2010
    Beiträge
    11
    so, jetzt hab ich wieder daheim. also jetzt habe ich gerade mal den ordner mit dem Testprogramm_C komplett gelöscht und einen neuen Ordner mit M32Test erstellt. in diesen habe ich dann das makefile, make clean und die c datei des buttons- beispielprogramm kopiert und umbenannt.

    anschließend habe ich im programmers notepad das ganze buttons programm, welches bei mir ja jetzt M32Test heißt kompiliert. das ging alles fehlerfrei.

    anschließend habe ich die hexdatei des M32Test mit dem RP6Loader in die M32 geladen.

    jetzt kommts:

    Die M32 macht bei diesem programm gar nichts.

    also muss bei mir irgendetwas beim kompilieren falsch laufen. komischerweise ging das bis vor ein paar wochen alles noch.

    was noch auffällig ist, ist, dass die hexdatei des M32Test- programms 12,2Kb speicherplatz hat, während das original hexfile des buttonsprogramm nur 11,7Kb hat.

    das alles lässt auf einen fehler beim kompilieren schließen.

    auf jeden fall brauche ich jetzt mal gute ratschläge...

    mfg

  8. #28
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.11.2009
    Alter
    31
    Beiträge
    188
    Auf die Schnelle fällt mir eigentlich nur eins ein ....

    Die Software deinstallieren (wirklich alles löschen) und anschließend wieder neu installieren.

    Einen Versuch wär das Wert, denn mehr als 10 Minunten dürfte das nicht dauern.
    Lad dir für die Neuinstallation auch das Setup neu vom Internet herunter.

  9. #29
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2010
    Beiträge
    11
    hallelujah, es geht.
    alles neu installiert und nun geht es.

    ich danke euch allen für eure hilfe.

    mfg

  10. #30
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2010
    Beiträge
    11
    so, jetzt habe ich herausgefunden, warum das programm nicht mehr funktioniert hat.

    in meinem letzten post hab ich ja geschrieben, dass jetzt wieder alles funktioniert, seit ich alles neu installiert habe. das funktionierte aber nur so lange, bis ich meinen timer 1 in der library initialisiert habe. ab diesem zeitpunkt trat wieder das selbe problem auf.

    darum habe ich die timerinitialisierung nun etwas abgeändert.

    ursprünglich war der timer so initalisiert:

    Code:
       TCCR1B =  (0 << ICNC1)
             | (0 << ICES1)
             | (0 << WGM13)
             | (1 << WGM12)
             | (0 << CS12)
             | (0 << CS11)
             | (1 << CS10);
    
       OCR1A = 221; 
      
    
    
      // Timer 2 - used for beeper:
      TCCR2 =  0; 
      OCR2  = 0xFF; 
    
      // Enable timer interrupts:
      TIMSK =   (1 << OCIE0)|(1<<OCIE1A);
      sei();
    als er so initialisiert war hat folgendes programm nur ausschließlich den interrupt abgearbeitet (war über textmeldungen erkennbar) und sonst gar ncihts gemacht, also auch keinen eingang abgefragt.

    Code:
    #include "RP6ControlLib.h"
    
    uint8_t a;
    uint8_t interruptcounter;
    
    
    ISR(TIMER1_COMPA_vect) 
      
      {interruptcounter++;
      
    if(interruptcounter <50)
      {PORTD ^= (1<<PD5);
      writeString_P("Interrupt Timer1 Compare\n");}
    
    if(interruptcounter > 50 && interruptcounter <101)
      {writeString_P("Interrupt Pause\n");}
    
    if(interruptcounter > 100)
      {interruptcounter =0;}
      
    
    
    }
    
    
    
    
    
    void infrarotempfang(void)
    {if (PINC & (1<<PC3))
    {
    a++;
    }
    
    if (a >100)
      {writeString_P("Infrarot empfangen\n");
      startStopwatch1();}
      
    if (getStopwatch1() >1000)
      {setStopwatch1(0);}
    }
    
    int main(void)
    {initRP6Control();
    
    DDRD |= (1<<PD5);  //PD5 als Ausgang
    
    DDRC &=~ (1<<PC3);    //PC3 als Eingang
    
    while(true)
    {
    
    infrarotempfang();
    }
    return 0;
    }
    darum habe ich die timerinitialisierung so abgeändert, dass wieder der eingang abgefragt wird:

    Code:
    TCCR1B =  (0 << ICNC1)
             | (0 << ICES1)
             | (0 << WGM13)
             | (1 << WGM12)
             | (0 << CS12)
             | (0 << CS11)
             | (1 << CS10);
    
        OCR1A = 221;
        TIMSK = (1<< OCIE1A);
       sei();
    	// Timer 2 - used for beeper:
    	TCCR2 =  0; 
    	OCR2  = 0xFF; 
    
    	// Enable timer interrupts:
    	TIMSK =   (1 << OCIE0);
    nun ist es so, dass in meinem programm der eingang wieder abgefragt wird, aber nun kein interrupt mehr ausgelöst wird.

    kann mir einer der RP6 experten sagen, warum das überhaupt so ist, dass die timerinitialisierung das programm derart beeinflusst?
    was muss ich jetzt noch ändern, damit der eingang abgefragt wird und gleichzeitig der interrupt auslöst?

    mfg

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

LiFePO4 Speicher Test