-         

Ergebnis 1 bis 2 von 2

Thema: 74HC165 Hardware Spi macht Probleme

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.01.2011
    Beiträge
    192

    74HC165 Hardware Spi macht Probleme

    Anzeige

    Hallo,
    ich kann mir leider keinen Reim darauf machen warum Code1 geht und Code2 mir fälschlicher weise sagt das nur Lows an den Eingängen der Register liegen...

    Code 1
    Code:
    int main(void)
    {
        uart_init();
        
        sei();
        uart_puts("Hallo!\r\n");
        
        DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4) | (1<<PB1); //MOSI, SCK, SS, PB1 als OUT
        PORTB |= (1<<PB6); //Pullup MISO
        
        setportbon(1); //PB1 = PL high
        setportboff(1); //PB1 = PL low
        setportbon(1); //PB1 = PL high
        
        while ( 1) 
        {
            if ( PINB & (1<<PINB6) ) {
                uart_putc('1');
                
            }
            else
            {
                uart_putc('0');
            }
            setportbon(7); //SCK = CP high
            setportboff(7);//SCK = CP LOW (Einmal Takten)
            _delay_ms(1000);
        }
    }

    Code 2
    Code:
    void serpa_init (void)
    {
        DDRB |= (1<<PB5) | (1<<PB7) | (1<<PB4) | (1<<PB1); //MOSI, SCK, SS, PB1 als OUT
                                                // !!! SS muss OUT sein, damit SPI nicht in Slave-Mode wechselt !!! 
        PORTB |= (1<<PB4) | (1<<PB1);                      //SS und PB1 auf High
    
        // SPI als Master 
        // High-Bits zuerst 
        // SCK ist HIGH wenn inaktiv 
        SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL);
    
        // pullup an MISO vermeidet Floaten 
        PORTB |= (1<<PB6); 
    
        // maximale Geschwindigkeit: F_CPU / 2 
        SPSR |= (1 << SPI2X);
    }
    
    void serpa_in (unsigned char* serpain)
    {
       unsigned char anz = 1;
    
       do
       {
            // 74HC165 latchen
            PORTB &= ~(1<<PB1);      //PB1 (PL) auf Low (Daten Lesen)
            PORTB |= (1<<PB1);   //PB1 (PL )auf High
            
    
            // SPDR lesen startet Uebertragung 
            //*serpain++ = SPDR;
            uart_putchar_bin( SPDR);
       }
       while (--anz > 0);
    }
    
    void uart_putchar_bin(unsigned char a)
    {
      uint8_t i = 8;
      while ( i-- ) {
        uart_putc( ((a & (1<<i)) ? '1' : '0') );
      }
      uart_puts("\r\n");
    }
    kann mir Bitte jemand helfen?

    Danke
    Geändert von deko (21.04.2012 um 14:40 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.01.2011
    Beiträge
    192
    Zitat Zitat von deko Beitrag anzeigen
    ...

    // SPDR lesen startet Uebertragung
    //*serpain++ = SPDR;
    SPDR = 0x00;
    while (!(SPSR & (1<<SPIF)));

    uart_putchar_bin( SPDR);
    ...
    so geht es dann...

    kann mir einer bitte mal sagen warum ich erst etwas senden muss um etwas zu empfangen?

Ähnliche Themen

  1. Attiny2313 macht Probleme
    Von unix1970 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 9
    Letzter Beitrag: 01.09.2011, 19:42
  2. Probleme mit Hardware-TWI (2 x Mega 168) [gelöst]
    Von robin im Forum Assembler-Programmierung
    Antworten: 3
    Letzter Beitrag: 26.11.2008, 16:06
  3. Bootloader macht Probleme
    Von H3llGhost im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 25.02.2008, 16:19
  4. TWI (I2C) am AVR Atmega128 macht Probleme
    Von tuxer im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 13.03.2007, 07:18
  5. Probleme mit Hardware Twi an Mega 16
    Von dreadbrain im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 07.01.2007, 22:26

Berechtigungen

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