- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: programm funktioniert nicht mehr?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.09.2006
    Ort
    Bayer/Unterfranken
    Beiträge
    31

    programm funktioniert nicht mehr?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    schönen guten abend zusammen!

    also ich hab jetzt mal mein erstes C-Programm für den Atmega32 (rn-control) geschrieben. habe das programm kompiliert und mit pony auf den MC geflasht. na kurzem hin und her hat es dann funktioniert.
    nur leider gehts jetzt nicht mehr...

    Code:
    #include <avr/io.h>
    
    int main(void) 
    {
      int i;
      DDRC = 0xff;  // PORTC als Ausgang 
      DDRA = 0x00;  // PORTA als Eingang
      while (1)
      
      {
     	i=PINA;
      	if(i == 0x01)
      	{
    	PORTC = 0x00;
    	}
    	else 
    		{
    		PORTC = 0xff;
    		}
      
     	}
    }
    im simulator funktioniert noch alles, nur wenn ich an PIN0 von PORTA 5V anlege passiert nichts mehr...
    an was könnte das liegen?

    gruß manu

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    an deinem code seh ich keinen fehler, und du sagst ja auch es hat schon geklappt.
    mein einer atmega hat häufig sein programm "verloren" wenn der ISP zu lange dranhing. also vielleicht einfach noch mal flashen?

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hmm, vielleich undefinierte Pegel am Port A ?

    versuch mal entweder einen Pulldown Widerstand anzuschliessen, oder mit PORTA = 0xFF;
    interne Pullups einzuschalten und gegen GND zu schalten...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.09.2006
    Ort
    Bayer/Unterfranken
    Beiträge
    31
    erst mal danke für eure antworten!
    hat leider beides nicht funktioniert.
    @izaseba
    ich hab das rn-control, wenn ich dann die pullups einschalte müsste ich doch die leds auslöten und drehen

    kann ich irgendwie einen funktionstest vom mc machen? nicht das ich den irgendwie geschrottet habe und merks nicht...


    greetz manu

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    ich hab das rn-control, wenn ich dann die pullups einschalte müsste ich doch die leds auslöten und drehen
    Was haben jetzt LED's mit Pullup an einem Taster zu tun ?
    RN-Controll, ist es nicht das Teil mit Dem Widerstandsnetzwerk an den Tastern ?

    Am sonsten wüßte ich auch nicht mehr, wo der Fehler liegt.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    du kannst mal messen ob versorgungsspannung stimmt (tut sie aber, sonst liesse sich der µC nicht beschreiben).
    du kannst schauen, ob am reset 5V anliegen.
    ich kenn das RN-Control nicht so gut, aber wenn dort an portA leds (von +5V mit vorwiderstand kommend) sind, sollte das nichts machen @pullups. dann leuchten sie eben nicht.
    du kannst dein programm mal vereinfachen, so dass portC immer high ist. dann sollten deine leds dort doch leuchten, oder? (ich guck dann gleich mal wie das RN-Control aufgebaut ist..)

    gruesse

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    09.09.2006
    Ort
    Bayer/Unterfranken
    Beiträge
    31
    also die spannungen sind alle da, auch am reset (4,89V).
    wenn ich das programm so ändere leuchten halt die leds dauerhaft und lassen sich nicht ausschalten!

    Code:
    int main(void) 
    {
      int i;
      DDRC = 0xff;  // PORTC als Ausgang 
      DDRA = 0x00;  // PORTA als Eingang
      	 
      while (1)
      
      {
     	i=PINA;
      	if(i == 0x80)
      	{
    	PORTC = 0xff;
    	}
    	else 
    		{
    		PORTC = 0x00;
    		}
      
     	}
    }
    ich weiß nicht, kenn mich noch nicht so gut aus, könnte es eventl auch an den lock- und fusebits liegen? hab an denen noch nichts herumgestellt!

    gruß manu

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Es stellt sich die Frage, ob Du weißt was
    Code:
    if ( i = 0x80)
    bedeutet.
    Das ist Käse, weil diese Bedienung ist nur dann erfüllt, wenn PA7 High und alle anderen Pins Lows sind.
    Besser wäre z.B.

    Code:
    if ( i & (1<<PA7) )
    zu schreiben, hier Prüfst Du nur Pin 7 ab, der Rest ist egal.

    Aber Bleib mal bei Deinem Pin0 und versuche es mal so :
    Code:
    #include <avr/io.h>
    
    int main(void)
    {
      int i;
      DDRC = 0xff;  // PORTC als Ausgang
      DDRA = 0x00;  // PORTA als Eingang
      PORTA = (1<<PA0);
      while (1)
     
      {
        i=PINA;
         if(i & (1<<PA0))
         {
       PORTC = 0x00;
       }
       else
          {
          PORTC = 0xff;
          }
     
        }
    }
    und dann hälst Du Pin0 vom PortA mal an 5V und mal an GND.

    Schauen wir mal was Passiert.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    09.09.2006
    Ort
    Bayer/Unterfranken
    Beiträge
    31
    huhu!
    respekt, so gehts! wenn ich dein programm nehme und PA0 auf masse lege gehn die leds aus
    kannst du mir bitte noch mal ein link oder ne erklärung zu posten? :
    PORTA = (1<<PA0); und i & (1<<PA0)

    was mich noch wundert ist das es dann überhaupt schon mal ging...

    vielen dank, gruß
    manu

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    respekt, so gehts!
    Naja, sehe Post Nr 1.

    Link ? Hier
    ist ein guter Tutorial, aber C Kentnisse sind denk ich mal eine Voraussetzung.

    Erklärung ?
    PORTA = (1<<PA0);

    Schaltet den internen Pullup ein, wenn der Port als Eingang definiert wurde.

    PA0 ist halt Pin0 am Port A und << soll halt in C bitschieben darstellen.

    i & (1<<PA0)

    & eine UND Verknüpfung ( wieder C )

    z.B. Zustand von i binär 01001111
    (1<<PA0) ergibt 00000001

    Und Verknüpfung :
    01001111
    00000001
    -----------
    00000001

    womit man bei 1 landet, 1 in einer if Abfrage ergibt true -> Schleife läuft durch.

    Gruß Sebastian

    P.S.

    wenn ich dein programm nehme
    Es ist nicht mein sondern Dein Programm mit 2 Modifikationen
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress