Forum: Mikrocontroller und Digitale Elektronik 8051er µC Hilfe, Experimentierboard


von Christian Sohnius (Gast)


Lesenswert?

Hallo, nachdem ich an der FH ein Mikrocontroller Praktikum machen
musste, und mir das eigentlich ziemlich viel spaß gemacht hat, wollte
ich sowas jetzt auch mal zu Hause ausprobieren. Ich hab mir nach dieser
Bauanleitung
http://batronix.com/elektronik/bauanleitungen/mc-board-2-layouts.shtml
ein kleines Experimentierboard gebaut, mit einem AT89C51RC2 Controller,
und zusätzlicher rs232 schnittstelle. So, alles aufgebaut, an PC
angeschlossen, und ich hatte auch Verbindung mit dem ATMEL Flip
Programm. Dann hab ich mal ein kleines Programm mit Bascom geschrieben,
und übertragen. Seit dem geht aber gar nix mehr. Der Controller macht
nichts, und ich kann auch keine Verbindung mehr zu dem Board aufbauen.
Was hab ich falsch gemacht? Ist dieser Controller für Anfänger
überhaupt zu empfehlen? Wenn nein, welchen sollte ich dann holen
(sollte schon 8051 kompatibel sein, weil da kann ich jetzt halbwegs für
assembler programmieren)?

von Blackmike (Gast)


Lesenswert?

Hab mir die Schaltung mal eben angeschaut...
naja,- so richtig gefallen tut die mir nicht. Hab selber erst vor 2
Monaten ein Projekt mit dem RC2 gemacht und die ganze Zeit beim Proggen
keinen Ärger gehabt,- auch mit Atmel Flip.

Um den Bootloader im RC2 zu aktivieren benutzt flip beim Auto ISP die
RTX und CTX Leitungen (Kannst im Flip unter Einstellungen auch
nachschauen was für welche funktion ist)
jedenfalls geht eine auf den Reset und die andere ich glaub auf Psen
bzw zieht PSEN auf ground (*auswendig gesagt,- hab hier meine
Datenbläter nicht).
Das ist die Hardware Condition, unter der der Atmel in den Bootloader
springt und du ihn dann programmieren kannst,- und der tuts sogut wie
immer... (Es sei denn, du hast mit dem Parallelbrenner die ISP
Eigenschaft abgeschaltet).
Deine schaltung schaut so aus,- als ob die mit der Softwarecondition
den Bootloader ansprint,- nur dazu mußt ein bestimmtes Flag im
Hardwaresecurity Byte brennen. und ich rate mal,- hast du nicht
gemacht...

lad dir von atmel mal das datenblatt zu den Rx2 Prozessoren runter,
da und in den Appnotes ist gut beschrieben, wie das mit flip und dem
Bootloader funzt.

Viel Erfolg,- greetz Black

von Christian Sohnius (Gast)


Angehängte Dateien:

Lesenswert?

Erstmal (wenn auch verspätet) danke für den Tip, jetzt funktioniert das
Programmieren einwandfrei.
Jetzt hab ich allerdings das nächste Problem. Ich versuche über einen
PCF8574 ein paar LED's zu steuern, mit dem angehängten Code. Klappt
aber nicht. Wenn ich 2 LED direkt an die Portleitungen hänge blinken
die eigentlich richtig, soweit ich das einschätzen kann, aber an dem
PCF blinkt nichts. Hab ich was in dem Code falsch, oder in der
Schaltung(kommt im nä. Post)? Ab und zu blinken die LED's ganz
schwach, kaum zu erkennen. Hab es auch schonmal mit nem anderen IC
probiert, weil ich dachte den 1. hätte ich kaputt gemacht, aber ohne
besseres Ergebnis.

Achja, was ist den an der Bauanleitung im 1. Post schlecht, was könnte
man besser machen=

von Christian Sohnius (Gast)


Angehängte Dateien:

Lesenswert?

schaltung

von mgiaco (Gast)


Lesenswert?

Hallo für was hast du R7 und R8 eingebaut?

Also ich verwende den I2C-Bus auch allerdings mit einem AVR und
normalerweise verden SCL & SDA direkt mit dem uC verbunden!!

==> ich denke das das nicht richtig ist mit den 330 Ohm!

mfg mathias

von Markus_8051 (Gast)


Lesenswert?

Hallo Christian,

hier kommen direkt mehrere Tipps:
Zur Schaltung:
1) Die 330R-Widerstände kann man einbauen, muß man aber nicht. Wenn man
sie aber verwendet, gehören sie an jedes I2C-Bus-Bauteil, sprich also
sowohl vom µC zum Bus, als auch vom PCF8574 zum Bus. Der Bus selbst hat
dann die 10k-Pullups.
2) Die LEDs sind falschrum eingebaut.

Zur Software:
3) Welchen Chip genau verwendest Du? Den PCF8574 oder PCF8574A? Sie
haben unterschiedliche Basisadressen, um mehr als 8 Bausteine dieser
Art an den Bus anschließen zu können. Du benutzt in Deiner Software die
Adresse 0x70. Das ist richtig für den PCF8574A. Für den ohne A muß die
Adresse 0x40 sein!
4) Nachdem Du (der µC, der Master auf dem I2C-bus) das Adressbyte
gesendet hat, muß der Master einen zusätzlichen SCL-Impuls generieren
und dabei SDA auf High halten. Währed dieser Zeit kann der Slave die
SDA-Leitung auf Masse ziehen, und damit den Empfang der Daten
bestätigen. Dieses Acknowledge kann/sollte vom Master ausgewertet
werden. Auf jedenfall aber muß dieser 9. SCL-Impuls generiert werden!
5) Am Ende Deiner i2c_schreiben-Routiene solltest Du unbedingt noch ein
SCL=0 einfügen. Sonst kann es beim Übergang von i2c_schreiben zu
i2c_stopp passieren, daß eine zusätzliche Start-Condition erzeugt
wird.

Also in etwa so:

void i2c_schreiben(unsigned char dat)  //Byte auf I2C ausgeben
  {
  unsigned char i;
  for (i=0;i<8;i++)
     {
    scl=0;      //scl auf 0
    i2c_warten();
    sda=((dat & 0x80)?1:0);  //msb von dat auf sda ausgeben
    dat<<=1;    //dat um 1 nach links schieben
    i2c_warten();
    scl=1;      //scl auf 1 -> slave liest sda
    i2c_warten();
     };
     scl=0;      //scl auf 0
     i2c_warten();
           sda=1
     i2c_warten();
     scl=1;      //scl auf 1
     i2c_warten();
           // hier kannst Du jetzt SDA abfragen, sollte low sein, dann
war Übertragung O.K.
           scl=0;      //scl auf 0
  }
6) Du warst sehr großzügig mit i2c_warten. Es wird so auf jedenfall
funktionieren, es muß aber sicher nicht so lange gewarte´t werden, und
Du mußt die Warteschleife auch nicht nach jedem SDA und SCL-Wechsel
aufrufen. Schau mal ins Datenblatt nach den hold-Zeiten.

Viel Erfolg,

Markus_8051

von Christian Sohnius (Gast)


Lesenswert?

danke für die tipps, werd ich gleich mal ausprobieren. die wartezeiten
hab ich nur so lange gemacht, um auch sicher zu sein, das das alles
stimmt, und auch, um an direkt angeschlossenen leds was erkennen zu
können.die leds hab ich auch richtig angeschlossen, hab den schaltplan
nur gestern schnell gezeichnet, da kann ich mich geirrt haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.