mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI-Problem mit ENC28J60


Autor: Tobias E. (tobinator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade einen ENC28J60 an einem ATmega324A in Betrieb zu 
nehmen und habe ein Problem mit dem MISO-Pin (siehe Anhang). Hat jemand 
schon mal soetwas gesehen und weiß, was zu tun ist?

Über einen ISP kann ich den ATmega324A programmieren, daher würde ich 
einen Kurzschluss mal ausschließen. Und wenn ich mir mit dem Oszilloskop 
die MOSI-Leitung anschaue, sieht die auch normal aus, d.h. ich würde 
eine falsche Einstellung am Oszi auch ausschließen. Wenn ich 
programmiere, dann sieht die MOSI-Leitung auch normal aus (geht runter 
bis auf 0V). Und den MISO-Pin habe ich auch nicht auf Ausgang 
geschaltet...

Gibt es sonst noch was, was man vergessen haben könnte?

Danke schon mal und viele Grüße

---------------------
Edit:
Also die gelbe Linie ist MISO...

: Bearbeitet durch User
Autor: Bescheidener Beobachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias E. schrieb:
> Gibt es sonst noch was, was man vergessen haben könnte?

- Einen Chip Select zu verdrahten?
- Einen Chip Select programmtechnisch zu bedienen?

Ansonsten hilft ein Schaltplan und dein Programm erheblich
weiter. Wenn nicht (keines von beiden), dann bleibt es ein
Rätselraten.

Autor: Tobias E. (tobinator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan ist als pdf angehängt
(Ich bin noch mehr oder weniger Anfänger, also ein paar Sachen sind 
bestimmt nicht optimal, aber ich denke es sollte schon funktionieren...)

und der Code:

(ich poste ihn mal hier direkt rein, dann müsst ihr keine Dateien 
downloaden)
#include <avr/io.h>
#include <util/delay.h>
#include "enc28j60.h"
#include "SPI.h"
#include "UART.h"


int main(void)
{
  //UARTInit();
  //uart_puts("Bootloader Version 0\n");
  //uart_puts("Noch passiert hier nichts...\n");
  
  //uart_puts("Initialisiere ENC28J60...\n");
  char ver = enc28j60::init();
  //uart_putc(ver);
  
    while (1) 
    {
    
    }
}


enc28j60.cpp:
(ist im wesentlichen aus dem Ethercard-Projekt)
#include "enc28j60.h"
#include "SPI.h"
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define SS_DDR DDRB
#define SS_PORT PORTB
#define SS_PIN DDB0

static char Enc28j60Bank;

char enc28j60::init(){
  SPIInit();
  
  disableChip();
  writeOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);
  _delay_ms(2); // errata B7/2
  while (!readOp(ENC28J60_READ_CTRL_REG, ESTAT) & ESTAT_CLKRDY)
  ;
  
  writeReg(ERXST, RXSTART_INIT);
  writeReg(ERXRDPT, RXSTART_INIT);
  writeReg(ERXND, RXSTOP_INIT);
  writeReg(ETXST, TXSTART_INIT);
  writeReg(ETXND, TXSTOP_INIT);

  writeRegByte(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN|ERXFCON_BCEN);
  writeReg(EPMM0, 0x303f);
  writeReg(EPMCS, 0xf7f9);
  writeRegByte(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS);
  writeRegByte(MACON2, 0x00);
  writeOp(ENC28J60_BIT_FIELD_SET, MACON3,
  MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN);
  writeReg(MAIPG, 0x0C12);
  writeRegByte(MABBIPG, 0x12);

  writeReg(MAMXFL, MAX_FRAMELEN);
  writeRegByte(MAADR5, 0x12);
  
  writeRegByte(MAADR4, 0x23);
  writeRegByte(MAADR3, 0x34);
  writeRegByte(MAADR2, 0x45);
  writeRegByte(MAADR1, 0x56);
  writeRegByte(MAADR0, 0x67);
  writePhy(PHCON2, PHCON2_HDLDIS);   //<------- hier hängt es -----

  SetBank(ECON1);
  writeOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE);
  writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN);

  char rev = readRegByte(EREVID);
   // microchip forgot to step the number on the silicon when they
   // released the revision B7. 6 is now rev B7. We still have
   // to see what they do when they release B8. At the moment
   // there is no B8 out yet
  if (rev > 5) ++rev;
  return rev;
  
}

void enc28j60::enableChip()
{
  cli();
  SS_PORT &= ~(1 << SS_PIN);
}

void enc28j60::disableChip()
{
  SS_PORT |= (1 << SS_PIN);
  sei();
}

void enc28j60::xferSPI (char data) {
  SPDR0 = data;
  while (!(SPSR0&(1<<SPIF0)))
  ;
}

char enc28j60::readOp (char op, char address) {
  enableChip();
  xferSPI(op | (address & ADDR_MASK));
  xferSPI(0x00);
  if (address & 0x80)
  xferSPI(0x00);
  char result = SPDR0;
  disableChip();
  return result;
}

void enc28j60::writeOp (char op, char address, char data) {
  enableChip();
  xferSPI(op | (address & ADDR_MASK));
  xferSPI(data);
  disableChip();
}

void enc28j60::readBuf(uint16_t len, char* data) {
  uint8_t nextbyte;

  enableChip();
  if (len != 0) {
    xferSPI(ENC28J60_READ_BUF_MEM);
    
    SPDR0 = 0x00;
    while (--len) {
      while (!(SPSR0 & (1<<SPIF0)))
      ;
      nextbyte = SPDR0;
      SPDR0 = 0x00;
      *data++ = nextbyte;
    }
    while (!(SPSR0 & (1<<SPIF0)))
    ;
    *data++ = SPDR0;
  }
  disableChip();
}

void enc28j60::writeBuf(uint16_t len, const char* data) {
  enableChip();
  if (len != 0) {
    xferSPI(ENC28J60_WRITE_BUF_MEM);
    
    SPDR0 = *data++;
    while (--len) {
      uint8_t nextbyte = *data++;
      while (!(SPSR0 & (1<<SPIF0)))
      ;
      SPDR0 = nextbyte;
    };
    while (!(SPSR0 & (1<<SPIF0)))
    ;
  }
  disableChip();
}

void enc28j60::SetBank (char address) {
  if ((address & BANK_MASK) != Enc28j60Bank) {
    writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_BSEL1|ECON1_BSEL0);
    Enc28j60Bank = address & BANK_MASK;
    writeOp(ENC28J60_BIT_FIELD_SET, ECON1, Enc28j60Bank>>5);
  }
}

char enc28j60::readRegByte (char address) {
  SetBank(address);
  return readOp(ENC28J60_READ_CTRL_REG, address);
}

uint16_t enc28j60::readReg(char address) {
  return readRegByte(address) + (readRegByte(address+1) << 8);
}

void enc28j60::writeRegByte (char address, char data) {
  SetBank(address);
  writeOp(ENC28J60_WRITE_CTRL_REG, address, data);
}

void enc28j60::writeReg(char address, uint16_t data) {
  writeRegByte(address, data);
  writeRegByte(address + 1, data >> 8);
}

uint16_t enc28j60::readPhyByte (char address) {
  writeRegByte(MIREGADR, address);
  writeRegByte(MICMD, MICMD_MIIRD);
  while (readRegByte(MISTAT) & MISTAT_BUSY)
  ;
  writeRegByte(MICMD, 0x00);
  return readRegByte(MIRD+1);
}

void enc28j60::writePhy (char address, uint16_t data) {
  writeRegByte(MIREGADR, address);
  writeReg(MIWR, data);
  while (readRegByte(MISTAT) & MISTAT_BUSY)
  ;
}
#include "SPI.h"
#include <avr/io.h>
#include "avr/iom324a.h"

void SPIInit(void){
  DDRB |= (1<<DDB7)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB0);
  /*
   *  SPCR0:
   *    SPIE:  Interrupt ausführen, wenn gesetzt
   *    SPE:  SPI Enable
   *    DORD:  1=LSB, 0=MSB
   *    MSTR:  1=AVR ist Master, 0=AVR ist Slave
   *    CPOL:  Clock Polarity
   *    CPHA:  Clock Phase
   *    SPR:  Clock Rate
   */
  SPCR0 = ((1<<SPE0)|(1<<MSTR0));
  SPSR0 |= (1<<SPI2X0);
}

Autor: fast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MOSI vom AVR auf SO vom ENC? oder verkehrt herum?

Autor: Bescheidener Beobachter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tobias E. schrieb:
> ist im wesentlichen aus dem Ethercard-Projekt

So so, das Ethercard-Projekt? Es gibt nur eins, und das kennen
wir alle, nicht wahr?

Also nur nicht zu viel Informationen hier bringen, immer schön
den Leser im Dunklen lassen um was es sich handelt.

Ich suche mir die Infos jedenfalls nicht zusammen.
Die enc28j60.h Datei fehlt auch noch ....

Und dann noch: siehe Bild. Bist 8 Jahre hier angemeldet
und solltest wissen was Sache ist.

Autor: Tobias E. (tobinator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
MISO vom AVR auf SO vom ENC, ist doch richtig, oder?

Mit "das Ethercard-Projekt" meinte ich dieses hier:

https://github.com/jcw/ethercard

Mir war nicht bewusst, dass es mehrere gibt.

Und zu deinem Bild: mich persönlich nervt es immer, wenn ich Dateien 
downloaden muss... aber ok...

Jetzt ist alles im Anhang

Autor: fast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias E. schrieb:
> MISO vom AVR auf SO vom ENC, ist doch richtig, oder?

MOOOOOOOSI bedeutet „Master Out Slave in“
und passt zu SO (Slave out)

Autor: fast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fast schrieb:
> Tobias E. schrieb:
>> MISO vom AVR auf SO vom ENC, ist doch richtig, oder?
>
> MOOOOOOOSI bedeutet „Master Out Slave in“
> und passt zu SO (Slave out)

sorry, ich spreche im Fieberwahn, vergiss alles was ich schrub

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

fast schrieb:
> Tobias E. schrieb:
>> MISO vom AVR auf SO vom ENC, ist doch richtig, oder?

Ja, ist richtig.

> MOOOOOOOSI bedeutet „Master Out Slave in“
> und passt zu SO (Slave out)

Häääää???

Gruß aus Berlin
Michael

Autor: Bescheidener Beobachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias E. schrieb:
> (ich poste ihn mal hier direkt rein, dann müsst ihr keine Dateien
> downloaden)
#include <avr/io.h>
#include <util/delay.h>
#include "enc28j60.h"
#include "SPI.h"
#include "UART.h"

int main(void)
{
  //UARTInit();
  //uart_puts("Bootloader Version 0\n");
  //uart_puts("Noch passiert hier nichts...\n");
  
  //uart_puts("Initialisiere ENC28J60...\n");
  char ver = enc28j60::init();
  //uart_putc(ver);
  
    while (1) 
    {
    
    }
}

Zunächst musst du mal lernen was (im Sinne von C-Programmierung)
eine Klasse ist, und dass man eine Klasse, wenn man sie benutzen
will, instanzieren muss.

Beispiele dazu gibt es in dem Projektverzeichnis.
Um zu verstehen was eine Klasse ist musst du ein Buch
über C++ lesen.

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael U. schrieb:
> Hallo,
>
> fast schrieb:
>> Tobias E. schrieb:
>>> MISO vom AVR auf SO vom ENC, ist doch richtig, oder?
>
> Ja, ist richtig.
>
>> MOOOOOOOSI bedeutet „Master Out Slave in“
>> und passt zu SO (Slave out)
>
> Häääää???
>
> Gruß aus Berlin
> Michael

Danke, ich fing schon an zu zweifeln :)

Berlin ist übrigens eine sehr geile Stadt :D

@Bescheidener Beobachter (Gast)

Ok, C++ ist tatsächlich neu für mich. Aber daran liegt es hier doch 
nicht, oder?

Autor: fast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch mal kurz
DDRB = (1<<DDB7)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB0);
anstatt
DDRB |= (1<<DDB7)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB0);

Autor: Tobias E. (tobinator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fast schrieb:
> versuch mal kurz
> DDRB = (1<<DDB7)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB0);
> anstatt
> DDRB |= (1<<DDB7)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB0);

funktioniert leider auch nicht... da hatte ich schon ziemlich viele 
Kombinationen durchprobiert...
Was ich vorhin vergessen hatte zu erwähnen: Mir ist noch aufgefallen, 
dass wenn DDB4 auf 0 steht, also Eingang ist, dann bekomme ich nicht 
einmal diese kleinen Zacken... Da bleibt die gelbe Linie ziemlich 
konstant...

Also mal angenommen, ich hätte beim löten was versaut... wo müsste ich 
dann am ehesten gucken? Ich habe schon versucht, mit dem Finger die Pins 
vom ENC auf die Platine zu drücken, aber auch das hat nichts geändert...

Autor: Bastian W. (jackfrost)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die gelbe Leitung vom Oszillogram scheint im Leerlauf auf Vcc/2 zu sein. 
Das passt nicht zu SPI. Miss da nochmal nach.

Gruß JackFrost

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich betreibe das ganze mit 3,3V, also das sollte schon hinkommen.

Aber mir ist gestern Abend beim rumprobieren noch etwas aufgefallen: 
wenn ich den ISP-progammer abziehe, dann fällt das signal runter auf 0V, 
hat aber immer noch diese zacken. Und wenn man sich das Signal mal 
anschaut sieht das ja auch nicht aus wie sinnvolle Daten, sondern eher, 
als wenn hier das sck-signal überspricht... ich mess heute abend mal 
nach, ob die beiden Signale synchron sind.

Wenn ja, dann überprüfe ich noch mal die Lötstelle am ENC.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tobias E. (Gast)

>Aber mir ist gestern Abend beim rumprobieren noch etwas aufgefallen:
>wenn ich den ISP-progammer abziehe,

Welchen denn? Wenn das eine Billiggurke ist, dann macht der kein 
Tristate und blockiert dir das SPI.

>hat aber immer noch diese zacken. Und wenn man sich das Signal mal
>anschaut sieht das ja auch nicht aus wie sinnvolle Daten, sondern eher,

Eben. Das ist keine Digitalsignal, denn man hat nur ein paar 100mV 
Amplitude. Du mißt ein Artefakt. Das kann aber auch am Tastkopf liegen, 
wenn der Klemmhaken nicht richtig kontaktiert ist.

>als wenn hier das sck-signal überspricht... ich mess heute abend mal
>nach, ob die beiden Signale synchron sind.

Miß einfach mal ALLE 4 SPI-Signale, dort muss auf JEDEM Signal ein 
sauberer Pegel mit HIGH/LOW anliegen.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Deine 3,3V sind aber stabil? Der ENC28J60 zieht über 200mA.
Ansonsten ist SPI da eigentlich recht unkritisch, die I/O sind auch 5V 
tolerant falls man den AVR mit 5V betreibt.

Gruß aus Berlin
Michael

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Programmieradapter ist eher ein preiswertes Modell, von diamex, 
aber bei reichelt bestellt, kein China-Teil.
Mein oszilloskop ist auch ein digilent analog discovery 2. Eigentlich 
ganz ok, aber kein Profi-werkzeug.
SCK und MOSI sehen gut aus, CS ist etwas schwierig zu messen, weil ich 
nichts fest anschließen kann. Ich probiere es nachher aber nochmal. Mit 
meinem oszilloskop kann ich aber maximal 2 Kanäle gleichzeitig messen. 
Aber ich probiere es heute Nachmittag mal.

Die Spannung ist eigentlich stabil, sie schwankt nur im mV Bereich. Ich 
gucke heute Nachmittag mal, ob ich zum probieren auch mal 5 V 
anschließen kann.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Tobias E. schrieb:
> Die Spannung ist eigentlich stabil, sie schwankt nur im mV Bereich. Ich
> gucke heute Nachmittag mal, ob ich zum probieren auch mal 5 V
> anschließen kann.

aber NICHT an den ENC28J60, der will 3,3V als Betriebsspannung! Nur 
seine IO-Pins sind 5V tolerant, lassen sich also ohne Pegelwandler von 
einem 5V AVR ansteuern.

Gruß aus Berlin
Michael

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ok, na dann hat sich das Thema schon erledigt...

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Die gelbe Linie sieht ganz und gar nicht stabil aus. Ich sehe da HF 
Anteile drin. Die folgenden Tips beziehen sich darauf, auch wenn sie 
dein Hauptproblem nicht lösen solltest du sie trotzdem umsetzen:

Der AVR sollte 4 100nF Abblock-Kondensatoren bekommen. Für jedes VCC/GND 
sowie AVCC/GND Paar einen eigenen.

Am ESP-12 Modul fehlt ein 100µF oder 220µF Pufferkondensator an VCC/GND.

Beim ESP-12 Modul gehört ein Widerstand (z.B. 2,2k Ohm) zwischen GPO15 
und GND, da der Pin beim Start kurzzeitig als Ausgang mit "flackerndem" 
Signal angesteuert wird.

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die gelbe Linie ist mein MISO-Signal. Das macht hier sowieso komische 
Sachen...

Aber die anderen Sachen werde ich in der nächsten Version umsetzen, 
danke für den Hinweis

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Stefanus F. schrieb:
> Am ESP-12 Modul fehlt ein 100µF oder 220µF Pufferkondensator an VCC/GND.

von welchem ESP sprichst Du?
Er will einen ENC28J60 LAN-IC in Gang bringen.

Oh gerade auf seinen Schaltplan geschaut: der hat aber mit dem Thread so 
rein garnichts zu tun...

@Tobias E. (tobinator): hast Du auch den Schaltplan zu Deinem Projekt?
Sind das Module oder Eigenbau von Dir?

Gruß aus Berlin
Michael

: Bearbeitet durch User
Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber ein ESP ist auch noch mit drauf. Der ist zwar aktuell nicht 
aufgelötet, aber ich hab ihn mal vorgesehen, falls ich mal mit wlan 
basteln will

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der schaltplan ist genau wie in der pdf, nur das das esp-modul nicht 
eingelötet ist. Ist auch eine Eigenentwicklung von mir.
Die platine hab ich bei elecrow fertigen lassen und selbst bestückt. Und 
meine Vermutung ist gerade, das da beim smd-löten was schief gegangen 
ist...

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
> von welchem ESP sprichst Du? ... der hat aber mit dem Thread so
> rein garnichts zu tun...

Wenn er denn bestückt gewesen wäre, hätte er einen Einfluss auf die 
Stabilität der Versorgungsspannung gehabt, was diese zacken in der 
gelben Linie hervorrufen könnte.

Das dies nicht sein Haupt-Problem löst, hatte ich selbst dazu 
geschrieben.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Tobias E. schrieb:
> Der schaltplan ist genau wie in der pdf, nur das das esp-modul nicht
> eingelötet ist. Ist auch eine Eigenentwicklung von mir.

ok, hatte mir nicht das ganze pdf angeschaut...

Frage: der Quarz ist auch ein 25MHz Grundwellenquarz und nicht 
versehentlich ein Oberwellenquarz? Der würde in dieser Schaltung nicht 
gehen, weil er auf 8,xxx MHz schwingen würde.
Die Kennzeichnung ist leider nicht mehr so sicher wie früher:
Frequenzangabe in kHz Grundwellenquarz, in MHz Oberwellenquarz.
Macht nur leider nicht mehr jeder Quarzhersteller so.

Gruß aus Berlin
Michael

: Bearbeitet durch User
Autor: Tobias E. (tobinator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ha...
davon hab ich ja gar keine Ahnung. Ich habe den hier genommen:
https://www.digikey.de/product-detail/de/ecs-inc/E...
Da steht was von Betriebsmodus: Erste Harmonische... Das müsste doch 
dann ein Grundwellenquarz sein, oder?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Tobias E. schrieb:
> Das müsste doch
> dann ein Grundwellenquarz sein, oder?

ja, sollte passen. Das Herstellerdatenblatt sagt auch daß sie erst ab 
27MHz Oberwellenquarze machen.
Fällt mir im Moment nichts weiter ein. Wenn der ENC28J60 Spannung und 
Takt hat geht SPI auch. Normalerweise... Zumindest hatte ich damals 
damit nie Probleme.

Eigentlich kann nur /CS nicht passend ankommen wäre zumindest mein 
Verdacht.

Gruß aus Berlin
Michael

: Bearbeitet durch User
Autor: Tobias E. (tobinator)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt gerade nochmal nachgemessen:

Also wenn ich nicht aus versehen den falschen Pin erwischt habe, dann 
hängt der CS-Pin auf ca. 2,4V... Ich habe dann mal was anderes drauf 
geflasht, quasi alle Pins an Port B im 100 ms Takt an und aus machen, 
und es ist immer noch das selbe... Am SCK-Pin sehe ich den 100 ms Takt 
wunderbar, aber am CS-Pin nicht...

Mein Code:
#define F_CPU 3125000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB = 0xff;
    while (1) 
    {
        PORTB = 0xff;
        _delay_ms(100);
        PORTB = 0x00;
        _delay_ms(100);
    }
}

Wie kann denn das sein? Ich verzweifel hier noch an dem Zeug...

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kalte Lötstelle?

Autor: Tobias E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab eigentlich direkt auf den pin gehalten...

Aber ich hab doch eigentlich auch nirgends diese Spannung...

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Kontrolliere mal, ob alle VCC Pins (von AVR und Netzwerk-Chip) wirklich 
mit VCC verbunden sind, und das Gleiche auch mit GDN Pins.

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie hast Du den Takt auf 3,1250MHz eingestellt?
Laut Schaltplan hat der Quarz 10MHz, oder?

Tobias E. schrieb:
> #define F_CPU 3125000UL

Autor: Tobias E. (tobinator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl M:

Ja, danke, du hast recht... Ich hab mich auch schon gewundert, aber 
nicht weiter nachgeguckt... Hab mich einfach gefreut, dass die 
delay-Funktion halbwegs passt... Aber ich hab tatsächlich die Quarze 
vertauscht...

@Alle anderen:

Jetzt geht es... es muss wohl wirklich eine Lötstelle gewesen sein.
Vielen Dank für eure Hilfe

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.