mikrocontroller.net

Forum: Compiler & IDEs atmega8 und Schieberegister ganz einfach


Autor: Tamme D. (tamme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe ein kleines Problem ich habe mir eine kleine Schaltung mit 
einem atmega8 und einem Schieberegister aufgebaut (wie im AVR-Tutorial 
beschrieben) und an alle Ausgänge jeweils eine LED gehängt
nun wollte ich das ganze nur um das System zu verstehen wie folgt 
ansteuern:
#include <avr/io.h>

#define SER 0
#define SCK 1
#define SCL 2
#define RCK 3

int main(void)
{
  DDRB = 0xff;
  

  PORTB |= (1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB &= ~(1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB |= (1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB &= ~(1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);

  PORTB |= (1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB &= ~(1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);

  PORTB |= (1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB &= ~(1 << SER);
  PORTB |= (1 << SCK);
  PORTB &= ~(1 << SCK);
  
  PORTB |= (1 << RCK);
  PORTB &= ~(1 << RCK);
  
  while(1)
  {
    PORTB |= (1 << 5);
  }
} 


das
PORTB |= (1 << 5);
 habe ich zu testzwecken eingebaut

die LED geht dort auch an also wird das Programm wohl durchlaufen... 
jedoch tut sich bei den am Schieberegister angeschlossenen LEDs 
garnichts... woran kann das liegen?

Danke im Voraus,
Tamme

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt alles kontrolliert zu haben.
Du hast anscheinend den Schieberegister Eingang SCL an den
Port gelegt. SCL ist aber low-aktiv. Da du den entsprechenden
Ausgang am Port nie auf 1 setzt, liegt dort am Ausgang noch
immer eine 0 an. Diese 0 am SCL Eingang ist aber fatal. Denn sie
bedeutet: Das Schieberegister löschen.

Autor: G. L. (sprintersb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SCK und RCK sind positiv flankengetriggert.

Damit
 PORTB |=  (1 << RCK);
 PORTB &= ~(1 << RCK);

ein Strobe an RCK gibt, müss RCK (zB zu Beginn des Progs) auf LOW sein.

So wie's dasteht, gibts beim ersten Mal anstatt eines HIGH-Strobe (also 
HIGH-Flanke + LOW-Flanke) nur eine LOW-Flanke. Dito für SCK.

http://www.datasheetcatalog.com/datasheets_pdf/7/4...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.