- SF800 Solar Speicher Tutorial         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Schieberegister als Output

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Powerstation Test
    Die sagen, bei +50 Grad und 15V kann jeder Output 120 mA liefern.
    wie gesagt, geschaltet wird immer mit TTL-Pegel
    Ich weiß nicht, was das Zeug kostet, aber ich täts mit irgendwelchen 08/15 Transistoren treiben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    115
    Mit den Transistoren bekomme ich aber Platzprobleme. Ich baue das ganze in dreifacher Ausführung.

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Klaro, das is'n argument
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    115
    Was mich interessieren würde, wie ich nun die Register zum arbeiten bekomme. Um die Daten die im Register stehen auszugeben soll ich ja nun 5V auf RCK geben. Soll das nur orübergehend geschehen, oder wie lange? Wie ist das denn in den SPI-Funktionen vom CCS vorgesehen?

    Wie schnell kann man denn so ein Register kaputt machen, ich habe welche die stehen immer auf Hich und andere die geben garnix von sich. Funktionieren tut hier nischts so rischtisch.

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    50
    Beiträge
    851
    Servus starkeeper!

    Reset solltest du nicht direkt an +5V schließen. Eher über einen 10k-Vorwiderstand. Das ist allgemein üblich wenn man sich nicht sicher ist ob es der Baustein verträgt.

    Die Register bekommst du zum arbeiten wenn du über deine SPI Ein Byte mit 8 Bits abschickst. Wie das bei einem PIC geht weiß ich nicht das ich nicht mit PIC's arbeite. Mußt du nachlesen oder ein anderer weiß es vieleicht. Check mal trotzdem ob überhaupt Signale an den Leitungen anstehen beim Absenden.

    Das übernehmen der Daten mit dem RCK-Pin geschieht laut Bausteinzeichnung mit einer Flanke. Also muß nachdem die beiden Bytes abgesenbdet wurden der Pin im Pegel wechseln das es ausgegeben wird an die beiden ULN2803.

    Grüße Wolfgang

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    115
    @BlueNature
    Was meinst du denn mit Reset? Die Schieberegsiter haben doch garkein Reset.

    Mich wurmt es das so eine eigentlich simple Sache nicht klappt, wie soll ich denn dann jemals zu einer aufwendigen Schaltung kommen. Daher wäre es nett wenn ihr mir auf die Sprünge helft.

    Folgendermassen sieht nun meine Gesamtschaltung aus. Ich kann dort keinen Fehler erkennen.
    Den Pic habe ich mit folgendem TestCode bespielt:
    Code:
    #include <16F876.h>
    
    #USE DELAY (CLOCK=20000000)
    #FUSES HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
    
    unsigned int token;
    
    void main()
    {
    	token = 0;
    
    	setup_adc(ADC_OFF);
    
    	set_tris_a(0b00000000);
    	set_tris_b(0b00000000);
    	set_tris_c(0b00000000);
    	
    	output_a(0x00);
    	output_b(0x00);
    	output_c(0x00);
    
    	// Setup SPI
    	setup_spi(spi_master | spi_l_to_h | spi_clk_div_64);
    
    	while(TRUE)	// Programmschleife
    	{
    			// write to SPI 
    			if(token == 0)
    			{
    				spi_write(0x10101010b);
    				token = 1;
    				delay_ms(10);
    				output_high(PIN_C6);
    				delay_ms(10);
    				output_low(PIN_C6);
    				delay_ms(900);
    			}
    			else
    			{
    				spi_write(0x01010101b);
    				token = 0;
    				delay_ms(10);
    				output_high(PIN_C6);
    				delay_ms(10);
    				output_low(PIN_C6);
    				delay_ms(900);
    			}
    	}
    }
    Der Code soll einfach nur per SPI wechselnde Signale liefern, sodass die LEDs abwechselnd blinken. Es tut sich aber garnix.
    Die LEDs leuchten beim starten willkürlich auf und verharren so, ohne dass der PIC irgend einen Einfluss hat.

    Wo zum Teufel liegt denn nun mein Fehler?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken layout_ii.jpg  

  7. #17
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich weiß das jetzt nicht auswendig, du mußt darauf achten, daß er die Clock-Flanke in der Mitte des Datenbits setzt, ich glaub, du brauchst die steigende Flanke. Ist aber im Datasheet klitzeklein beschrieben.
    Anm: Ich verwend selbst ausgiebigst den SPI. Ich würde an deiner Stelle alle register hintereinander setzen und dafür den Vorteiler auf 1.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    115
    Also du benutzt nicht die SPI-Funktionen vom CCS? Oder wie kann ich denn da einfluss nehmen auf solche Parameter?

  9. #19
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich mach's im Assembler.
    Aber die Musik spielt so oder so da:

    setup_spi(spi_master | spi_l_to_h | spi_clk_div_64);

    spi_master ist klar
    spi_clk_div_64 Prescaler ist auch klar

    spi_l_to_h hier wird bestimmt, wie die Flanken liegen
    da mußt du in der Doku schauen, wie's gemeint ist.

    Ich vermute, du braucht spi_h_to_h, d.h. mit der fallenden Flanke legt er das daten-Bit an, und genau IM Bit geht die Clock-Flanke wieder rauf. (datenübernahme im Shift-Register)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.02.2005
    Beiträge
    115
    HAHA, ich werd verrückt!

    Also ich habe nun mal eigenen Code geschrieben und es funktioniert fast perfekt:

    Code:
    	output_low(RES_CLOCK_GREEN);
    
    	for(i=0; i < 16; i++)
    	{
    		if(zahl & pow(2,i))
    		{
    			output_high(SER_DATA_GREEN);
    		}
    		else
    		{
    			output_low(SER_DATA_GREEN);
    		}
    	
    		output_high(SER_CLOCK_GREEN);
    		delay_cycles(10);
    		output_low(SER_CLOCK_GREEN);
    	}
    
    
    	output_high(RES_CLOCK_GREEN);
    	delay_cycles(10);
    	output_low(RES_CLOCK_GREEN);
    Dieser Code würde z.B. wenn man die Variable zahl vom typ int16 auf xAAAA setzt ein an-aus-an.. Muster zauber. Das funktioniert soweit. Das Problem bei der Sache, das er die Daten direkt in das zweite Register schiebt und das erste bleibt immer leer. Liegt das ev. am Datentyp int16 oder wodran könnte das nun noch liegen?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress