- Akku Tests und Balkonkraftwerk Speicher    Werbung      
Ergebnis 1 bis 10 von 22

Thema: Software-SPI-Slave mit Tiny13V

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von ExKluski Beitrag anzeigen
    Mit der abfrage habe ich mich verlesen sollte so heißen
    Code:
     if(!(SPI_SS_PIN1 & (1<<SPI_SS_PB1)))
    Ob das jetzt korrekt ist, hängt davon ab, wie SPI_SS_PIN1 definiert ist. Die 1 darin lässt allerdings nichts Gutes vermuten.


    Zitat Zitat von ExKluski Beitrag anzeigen
    1 Bit weiter schieben und das dann ausgeben, mache ich das nicht mit
    Code:
     MSB<<=1;
    es ist doch in einer schleife die Solange durchlaufen wird bis 16 bit raus geschoben sind.

    MfG exkluski
    Nochmal: wenn MSB vorher 0x8000 ist, was ist es dann hinterher?
    Und wo bitte ist diese Schleife?
    MfG
    Stefan

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2011
    Beiträge
    27
    hinterher ist er 0, wäre es dann nicht besser es als Globale Variable "volatile" und die Richtung zu ändern

    Die Schleife meine ich
    Code:
    for(i=0;i<15;i++)
    {
    if(mask | word) SPI_MOSI_PORT|=(1<<SPI_MOSI_PIN); 
    else SPI_MOSI_PORT&=~(1<<SPI_MOSI_PIN); 
    if(SPI_MISO_PIN == 1) temp |= mask;
    SPI_CLK_PORT |=(1<<SPI_CLK_PIN); 		//CLK-Takt HIGH
    SPI_CLK_PORT &=~(1<<SPI_CLK_PIN); 		//CLK LOW
    mask >>= 1;
    }

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von ExKluski Beitrag anzeigen
    Die Schleife meine ich
    Und was hat diese Schleife mit deinem Slave-Code zu tun? Wo ist da eine Schleife?
    MfG
    Stefan

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2011
    Beiträge
    27
    Sorry mein fehler habe mich mit der schleife falsch ausgedrückt.

    Klar im slave habe ich keine schleife
    es ist doch in einer schleife die Solange durchlaufen wird bis 16 bit raus geschoben sind.
    damit meinte ich den master-code der in einer Zählschleife ist und 16 mal schiebt.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von ExKluski Beitrag anzeigen
    Sorry mein fehler habe mich mit der schleife falsch ausgedrückt.

    Klar im slave habe ich keine schleife

    damit meinte ich den master-code der in einer Zählschleife ist und 16 mal schiebt.
    Das beantwortet aber nicht die Frage, was das jetzt mit dem Slave-Code zu tun haben soll? Dort wird nach wie vor nur ein Bit ausgegeben.
    MfG
    Stefan

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2011
    Beiträge
    27
    jetzt habe ich es glaube verstanden wie du das meinst. Klar im slave code ist keine schleife also wird auch nur einmal geschoben.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2011
    Beiträge
    27
    Nach längerem grübeln ist der Code entstanden ich würde mich freuen wenn sich jemand durchschaut und auf anhieb fehler erkennt bzw. ob es so richtig ist wie ich es mir vorgestellt habe.

    bei der Warnung bin ich ratlos

    ../spi-tiny13.c:38: warning: suggest parentheses around assignment used as truth value

    weiss aber nichts damit anzufangen.
    Also das Programm soll ein SPI slave simulieren und ADC-werte schicken.
    Am MISO(PB3) werden dann die Pegel Geschaltet,
    Ich bin mir aber nicht Sicher ob der befehl das macht was ich will
    Code:
    while(GIMSK  & (1<<INT0));
    //warte bis am Externen Interrupt etwas passiert
    Und das ist mein ganzer Code
    Code:
    #include <avr/io.h>        // Namen der IO Register
    #include <avr/Interrupt.h> // Interrupt register
    #include "adc-init.h"
    #include "SPI-init.h"
    
    volatile char MISO_Byte;
    volatile int MSB = 0x8000;
    
    ISR(INT0_vect)
    {
    if(MISO_Byte == 1)SPI_MISO_PORT |= (1<<SPI_MISO_PB3); //Pin Miso high
    else SPI_MISO_PORT &= ~(1<<SPI_MISO_PB3);
    }
    
    int main(void)
    { 
       		
      uint16_t adcval;
      ADC_Init();
    /*Externen Interrupt-Init*/
      MCUCR = (1<<ISC01)|(1<<ISC00);
     //Interrupt auslösen wenn Steigende flanke ist
      GIMSK = (1<<INT0);	// Interrupt erlauben
      GIFR  = (1<<INTF0); 
     
    while( 1 ) {
    adcval = ADC_Read(0);  // Kanal 0
    // mach was mit adcval
     
    adcval = ADC_Read_Avg(2, 4);  // Kanal 2, Mittelwert aus 4 Messungen
    // mach was mit adcval
    
    MISO_Byte = MSB | adcval;
      
    if(!(SPI_SS_PIN1 & (1<<SPI_SS_PB1)))// Wenn SS(PB1) auf low geht start der Übertragung
    {
     ==>c35 for(uint16_t a =15 ; a = 0 ; a--)//Warning: suggest parentheses around assignment used as truth value
    {
     if(MISO_Byte & MSB)SPI_MISO_PORT |= (1<<SPI_MISO_PB3);
     else SPI_MISO_PORT &= ~(1<<SPI_MISO_PB3);
     while(GIMSK  & (1<<INT0)); 
    //warte bis am Externen Interrupt etwas passiert
     MISO_Byte<<=1;// Bit nach Links schieben
    }
    }
     else;
    }
       return 0;
    }
    Ich bedanke mich schonmal für die Kritik :P

    MfG Kluski

Ähnliche Themen

  1. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  2. Software-Slave für I2C-Bus
    Von ZellRobi im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 25.06.2008, 15:59
  3. Problem beim Programmieren bei minimaler Taktung Tiny13V
    Von Windi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 11.09.2007, 14:02
  4. Bezugsquelle für Tiny13V
    Von Windi im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 20.02.2006, 22:30
  5. AT90S2313 als I2C-Slave (Software-Implementierung)
    Von talentraspel_kai im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 08.02.2006, 15:03

Berechtigungen

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

    Werbung      Labornetzteil AliExpress