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

Thema: Anfänger Meine Schaltung macht merkwürdige Sachen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    21

    Anfänger Meine Schaltung macht merkwürdige Sachen

    Anzeige

    E-Bike
    Hi Leute,
    ich habe mit einem AT Mega 8 angefangen zu programmieren. Und den auf meinem STK500 mit nem kleinen Lauflicht beschrieben funktioniert auch wunderbar auf dem STK500.
    Jetzt dachte ich mir ich habe ja noch meinen alten Kosmos Elektronik Kasten, da könnt man sich doch mal schnell^^ nen Adapter machen. Ich habe mir die Schaltung aus eurem einsteiger Tutorial vorgenommen Stromversorgung Quarz und 100K Widerstand IC sockel drauf. Die Freien Pins mit nägel Verbunden und rauf auf den Kosmos Kasten. (Schaltplan im Anhang die Freien pins gehen auf die erwähnten nägel)
    Das Problem auf dem Kosmos Kasten Funktioniert es nicht mehr die Stromversogung Funktionier(5,02V laut Multi) Er shaltet auch die Leds die ich einfach auf dem Kosmos XN3000 gesteckt habe, aber er schaltet an und anstatt aus auf halbe kraft. Und auch sonst gibt er teilweise recht merkwürdige laufreinfolgen von sich.
    Hat jemand ne Idee woran es liegen könnte.
    Vielen Dank
    Angehängte Grafiken Angehängte Grafiken

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wie sind denn die LED angeschlossen ? Die Schaltung sieht ja unverdächtig aus. Kontakfehler etc. sieht man natürlich nicht und ich würde aber in diese Richtung vermuten.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    36
    Beiträge
    379
    Also ich würde auch mal stark auf ein Hardware Problem tippen. Eventuell läuft ein Krichstrom in deinem Steckbrett o.ä.
    Um sicher zu gehen würde ich aber trotzdem gerne mal die Software sehen oder ist das 1:1 die gleiche wie im tutuorial?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    21
    Nein Das Programm ist ein ganz anderes (selbst geschrieben). Aber ich habs ja auf dem STK500 Ausprobiert Und da läuft es ohne probleme. Der Kosmos kasten ist in Punkto verbindungen immer eins A gelaufen und ich habe die leds und schalter alle einzeln ausprobiert.
    Die LEDs sind mit 470Ohmwiederstnden an den Adapter gebunden und dann zurück auf GND.
    Am Kosmos kasten kanns nicht liegen. Der IC lauft auf dem STK500(vor und nachher. Nur mit Adapter macht er werkwürdige Sachen.
    Hier der Code:
    Code:
    #include <avr/io.h>          // (1)
    #ifndef F_CPU
    /* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert 
       (z.B. durch Übergabe als Parameter zum Compiler innerhalb 
       des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
       "nachträgliche" Definition hinweist */
    #define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz */
    #endif
    #include <util/delay.h>     /* in älteren avr-libc Versionen <avr/delay.h> */ 
    
    
    
    void long_delay(uint16_t ms) {
        for(; ms>0; ms--) _delay_ms(1);
    }
    
    void knightrider (void)
    {
    	DDRD = 0x00;
    	DDRD = 0xff;        // Port b alle pins auf ausgang
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );
    	
    	DDRB=0;				//set all PartB to input
    	
    	
     	PORTD ^= ( 1 << PD0 );
    	
        while(bit_is_set(PINB,0)) {
    		long_delay(30);
    		PORTD ^= ( 1 << PD1 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD2 );
            long_delay(30);
    		PORTD ^= ( 1 << PD3 );
    		PORTD ^= ( 1 << PD0 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD4 );
    		PORTD ^= ( 1 << PD1 );  
    		long_delay(30);
    		PORTD ^= ( 1 << PD5 );
    		PORTD ^= ( 1 << PD2 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD6 );
    		PORTD ^= ( 1 << PD3 );  
    		long_delay(30);
    		PORTD ^= ( 1 << PD7 );
    		PORTD ^= ( 1 << PD4 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD5 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD6 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD5 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD6 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD7 );
    		PORTD ^= ( 1 << PD4 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD6 );
    		PORTD ^= ( 1 << PD3 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD5 );
    		PORTD ^= ( 1 << PD2 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD4 );
    		PORTD ^= ( 1 << PD1 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD3 );
    		PORTD ^= ( 1 << PD0 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD2 );
    		long_delay(30);
    		PORTD ^= ( 1 << PD1 );
    	}
    	PORTD ^= ( 1 << PD0 );
    }
    
    void blink()
    {
    	DDRD =0x00;
    	DDRD =0xff;        // Port b alle pins auf ausgang
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	long_delay(200);
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//an
    	long_delay(50);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	long_delay(40);
    
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//an
    	long_delay(30);
    
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	long_delay(20);
    
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//an
    	long_delay(10);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	long_delay(10);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//an
    	long_delay(10);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	long_delay(10);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//an
    	long_delay(500);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );//aus
    	DDRD =0x00;
    }
    
    void boot()
    {
    	DDRD =0x00;
    	DDRD =0xff;        // Port b alle pins auf ausgang
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );
    	
    	PORTD ^= ( 1 << PD0 );
    	long_delay(100);
    	PORTD ^= ( 1 << PD1 );
        long_delay(100);
    	PORTD ^= ( 1 << PD2 );
    	long_delay(100);
    	PORTD ^= ( 1 << PD3 );
    	long_delay(100);
    	PORTD ^= ( 1 << PD4 );
        long_delay(100);
    	PORTD ^= ( 1 << PD5 );
    	long_delay(100);
    	PORTD ^= ( 1 << PD6 );
    	long_delay(100);
    	PORTD ^= ( 1 << PD7 );
        long_delay(500);
    	
    	PORTD ^= ( 1 << PD0 );
    	PORTD ^= ( 1 << PD1 );
    	PORTD ^= ( 1 << PD2 );
    	PORTD ^= ( 1 << PD3 );
    	PORTD ^= ( 1 << PD4 );
    	PORTD ^= ( 1 << PD5 );
    	PORTD ^= ( 1 << PD6 );
    	PORTD ^= ( 1 << PD7 );
    
    	
    		
    } 
    
    int main( void )
    {
    	boot();
    	blink();
    	DDRD=0;
        while(1)
    	{
    		if (bit_is_clear(PINB, 1))
    		{
    			knightrider();
    		}
    		if (bit_is_clear(PINB, 2))
    		{
    			blink();
    		}
    		if (bit_is_clear(PINB, 3))
    		{
    			boot();
    		}
    	}
        return 0;
    }
    könnte es daran liegen das ich jetzt einen Quarz drinnhabe den ich vorher nicht drinn hatte.(und nicht ins programm geschrieben habe)
    Das Layout häng ich auch noch mit dran. die Lötpunkte außen gehen an die nägel. Oben links ist minus rechts Plus.
    Die Teile von oben nach unten sind:
    Elko 470µF
    keramikkondensator 100nf(hatte nur noch zwei der obere fehlt)
    7805
    keramikkondensator 100nf
    100k Widerstand
    IC Sockel
    Quarz 16MHz
    zwei Keramik kondensatoren 22pF

    Der Pin unter minus ist ne 5V+ Stromzufuhr.
    Angehängte Grafiken Angehängte Grafiken

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn der Quarz nicht benutzt wird, sollte er auch keine Probleme machen. Ein quarz auf einem Testbrett ist sonst problematisch, wenn er gebraucht wird.

    Der Fehlende 100 nF Kondensator kann dagegen Probleme machen. Mindestens 2 sind nötig: einer vor dem Spannungsregler, dicht am Regler und einer hinter dem Spannungsregler und dicht an den GND/VCC Pins.

    Im Ideal fall sollte man 4 Kondensatoren haben: je einer dicht an GND/VCC und AGND/AVCC sowie vor und hinter dem Regler.

    Wenn die LEDs mit der richtigen Frequenz blinken (auch wenn sie nicht ganz ausgehen) sollte das Programm ja immerhin laufen. Es könnte sein das der Regler schwingt, und nur im Mittel die 5 V Stimmen.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    21
    Ich werde dann am Dienstag mal mich auf die Suche nach noch nem dritten 100nf machen. zwischen AGND und AVCC hab ich in der Grundschaltung keinen Kondensator gesehen
    den brauch man doch hoffentlich nicht unbedingt?
    Wenn man ihn verbaut muss es auch wieder ein 100nF sein?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    vielleicht ein masse-fehler ?
    gruss klaus

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    21
    sry ich bin nicht so ein elektronik profi was ist denn ein masse fehler?

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    ich meinte, dass die minus-verbindung zwischen den beiden schaltungen nicht gut genug funktioniert. sowas könnte zumindest sein , da sowas sehr merkwürdige effekte erzeugt.

    gruss

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das ist erstmal nicht so wichtig, aaaaaber statt
    Code:
       PORTD ^= ( 1 << PD0 ); 
       PORTD ^= ( 1 << PD1 ); 
       PORTD ^= ( 1 << PD2 ); 
       PORTD ^= ( 1 << PD3 ); 
       PORTD ^= ( 1 << PD4 ); 
       PORTD ^= ( 1 << PD5 ); 
       PORTD ^= ( 1 << PD6 ); 
       PORTD ^= ( 1 << PD7 );
    solltest du schreiben
    Code:
       PORTD ^= 0xFF;
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen