Forum: Mikrocontroller und Digitale Elektronik ATmega 164P USART funktioniert nur mit beschaltung auf PB7


von Sebastian S. (sebastian_s25)


Lesenswert?

Hallo

So wie ich es schon in der Überschrift geschrieben habe, funktioniert 
bei mir der USART nur, wenn ich den PB7 (SCK) entweder auf den Ausgang 
eines anderen µCs schalte oder ihn mit dem Oszi anschauen will...

Hängt der PB7 irgendwie mit dem USART zusammen?

Der PB7 ist nach dem Einschalten als Ausgang konfiguriert und auf Lo 
gesetzt. Und es ändert auch nichts, ihn auf Hi zu setzen...

Wenn ich das Oszi ohne GND Anschluss angeschlossen lasse, seh ich bei 
jeder USART-Übertragung ein Rechtecksignal! (Hab das per Zufall 
entdeckt, ich weiss nicht obs was hilft...)

Edit: der ATmega164P ist Pin kompatibel zum ATmega32

mfg
Bastian

von Hubert G. (hubertg)


Lesenswert?

USART in SPI-Mode?
Siehe Datenblatt.

von spess53 (Gast)


Lesenswert?

Hi

>Hängt der PB7 irgendwie mit dem USART zusammen?

Nein.

>USART in SPI-Mode?
>Siehe Datenblatt.

Die USARTs haben ihre eigenen Clockpins (XCKn).

MfG Spess

von slow (Gast)


Lesenswert?

>Wenn ich das Oszi ohne GND Anschluss angeschlossen lasse, seh ich bei
>jeder USART-Übertragung ein Rechtecksignal!

Ist da eine der Schaltungen am Schutzleiter angeschlossen? Schau doch 
mal. Ansonsten könnts auch 230V, hochohmig mit Meßbereich 1V/div sein, 
sieht auch wie Rechteck aus, halt mit 50 Hz.

von Sebastian S. (sebastian_s25)


Lesenswert?

Also ich bin der Meinung dass der nicht eingestellt waere!
1
void USART_Init(void)
2
{
3
    UBRR0H = UBRR_VALUE >> 8;
4
    UBRR0L = UBRR_VALUE & 0xFF;
5
 
6
    UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);         // Asynchron 8N1 
7
    UCSR0B |= (1<<RXEN0);                     // Enable UART RX
8
    UCSR0B |= (1<<TXEN0);                     // Enable UART TX
9
    UCSR0B |= (1<<RXCIE0);                    // Enable Interrupt
10
}

Aber was koennte das sonst sein?

Irgendwie muss da ja was nicht stimmen? Kann das sein, dass ich eine 
Sonderfunktion aktiviert habe?

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi slow

Meine Schaltung laeuft zwar mit 230V aber hat keinen Schutzleiter!!

und diese "Stoerungen" treten nur beim senden auf und haben genau einen 
3,3 V Peak!! Nur was noch ist, die Ruhespannung betraegt dann -3,3V und 
er wird auf 0 gezogen.

mfg
Bastian

von Peter D. (peda)


Lesenswert?

Für RS-232 mußt Du nicht nur RXD, TXD, sondern auch GND verbinden!!!


Peter

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Peter

das hab ich auch getan!!

da ich einen "externen" Max232 verwende, hab ich GND und Vcc 
standartmässig angschlossen.

mfg
Bastian

von ... (Gast)


Lesenswert?

Sebastian S. schrieb:
> UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);         // Asynchron 8N1

Lass mal die Zeile weg. Für 8N1 brauchst du die eh nicht, da UCSZn0 und 
UCSZn1 nach RESET eh 1 sind. Siehe Datenblatt.

Sebastian S. schrieb:
> Nur was noch ist, die Ruhespannung betraegt dann -3,3V und
>
> er wird auf 0 gezogen.

ALLE GND-Pins des ATmega auch an GND angeschlossen?
Weil MINUS 3,3V dürfte an keinem Pin des ATmegas anstehen.

von ... (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Für RS-232 mußt Du nicht nur RXD, TXD, sondern auch GND verbinden!!!

RS232 != USART

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi

Ich hab jetzt noch genauer auf die Loetstellen geschaut. Da is nix, hab 
auch die ganze Masse wieder nachgeoetet... NIX...

Was mir jetzt auch noch aufgefallen ist, ist, dass ich auf diesem Pin 
meinen Vcc Spannungsripple habe, der sich aber im Mittel auf 2mV 
bewegt... Leider geht es bei mir nicht ganz ohne, da der DCDC-Konverter 
das nicht mitmacht... :(

mfg
Bastian

von spess53 (Gast)


Lesenswert?

Hi

Poste mal die Schaltung.

>Wenn ich das Oszi ohne GND Anschluss angeschlossen lasse, seh ich bei
>jeder USART-Übertragung ein Rechtecksignal! (Hab das per Zufall
>entdeckt, ich weiss nicht obs was hilft...)

Nein. Hilft nicht, da eine solche Messung sinnfrei ist.

MfG Spess

von Sebastian S. (sebastian_s25)


Angehängte Dateien:

Lesenswert?

Hier bitte schoen!

Ist jetzt nur der Atmel mit Abblockkondensatoren, und den benoetigten 
Headdern.

Der "Header with RFModule" wir bei mit auch als Programmierschnittstelle 
verwendet. Bei diesem spinnt eben der NRF_SCK. Der andere Header ist der 
"USART-Header" von diesem geh ich mit einem Kabel an meinen Max232.

mfg
Bastian

von spess53 (Gast)


Lesenswert?

Hi

Und wo ist der erwähnte DCDC-Wandler?

Dein Fehlerbild

>So wie ich es schon in der Überschrift geschrieben habe, funktioniert
>bei mir der USART nur, wenn ich den PB7 (SCK) entweder auf den Ausgang
>eines anderen µCs schalte oder ihn mit dem Oszi anschauen will...

sieht für mich immer noch nach einer fehlenden Verbindung aus.

MfG Spess

von Sebastian S. (sebastian_s25)


Angehängte Dateien:

Lesenswert?

Hier ist er!!

Sorry, dachte der waere nicht notwendig...

mfg
Bastian

von ... (Gast)


Lesenswert?

Ist die Leiterplatte selbst hergestellt? Wenn ja, auf Unterbrechungen in 
den Zuleitungen von GND und VCC prüfen.

von ... (Gast)


Lesenswert?

Sebastian S. schrieb:
> Wenn ich das Oszi ohne GND Anschluss angeschlossen lasse

Ja, ist klar. Ohne Masseanschluss nimmt der Tastkopf auch jede 
Einstreuung auf. Dürfte nichts mit deinem Problem zu tun haben.
Poste doch mal deinen kompletten Code, oder ist der geheim?

von Michael (Gast)


Lesenswert?

Die Schottky-Diode bringt hinter der Spule nicht viel. Die muss auf jedn 
fall vor die Spule sonst erfüllt sie ja nicht ihren Zweck.

von ... (Gast)


Lesenswert?

Michael schrieb:
> Die muss auf jedn
>
> fall vor die Spule sonst erfüllt sie ja nicht ihren Zweck.

Genau da sitzt sie ja auch.

von Sebastian S. (sebastian_s25)


Lesenswert?

Danke!!

Hab schon gerätselt, wo sie sonst sein sollte....

Pläne gibts morgen.

Die Platinen wurden geordert!! Also nach meinem Layout angefertigt, wenn 
dann liegts an meinen Lötkünsten...

Werde morgen mal ne 2. durchmessen, bevor ich sie dann mal löte und mal 
schaun ob da der gleiche Fehler auftritt...

mfg
Bastian

von ... (Gast)


Lesenswert?

poste doch mal den kompletten Code.

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi

wie gesagt, die kommen morgen.

hab sie grad nicht da.

mfg
Bastian

von Volkmar D. (volkmar)


Lesenswert?

Hallo,

Sebastian S. schrieb:
> und diese "Stoerungen" treten nur beim senden auf und haben genau einen
> 3,3 V Peak!! Nur was noch ist, die Ruhespannung betraegt dann -3,3V und
> er wird auf 0 gezogen.

Kannst Du mal ein Foto von diesen Störungen machen? Und an welchen Pins 
misst Du dann genau?

Hast Du Brown-Out-Detection in den Fuses aktiviert? Wenn ja, mit welchem 
Wert?

Volkmar

von Sebastian S. (sebastian_s25)


Angehängte Dateien:

Lesenswert?

Hallo Leute

Hier ist wie versprochen mein Plan. (Als PDF, da bessere Aufloesung)

Es funktioniert alles!! Bis auf diesen USART!!

@Volkmar:

Also in den Fuses wäre gar keine Detection aktiviert...
H-Fuse: 0xD4
L-Fuse: 0xFF
e-Fuse: 0xFF

Ich hab nur das Problem mit dem Pin B7.

mfg
Bastian

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Leute

also ne loetstelle kanns jetzt nicht mehr sein!!

hab jetzt exact das gleiche Board nochmal geloetet und es funktioniert 
immer noch nicht so...

mfg
Bastian

von Herbert (Gast)


Lesenswert?

Hallo Sebastian,

wie geht es nach X17 weiter? (zum MAX232 ?)

Die -3,3V könnten von dort kommen, denn sonst gibts die nirgendwo
in deiner Schaltung.

Außerdem sollte der MAX232 eigentlich mit 5V betrieben werden
(könnte aber mit 3,3V auch funktioniern).

MfG
Herbert

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi

Ja da gehts weiter zum Max... Besser gesagt zum SP3232EEN! Der arbeitet 
auch mit 3,3 V. Sorry, hab mich da vertan....


Ich hab auch alle 4 Kabel (Vcc, GND, RX und TX) hingefuehrt und von dort 
geh ich dann mit einem Nullmodemkabel zum Comport des PCs weiter...

mfg
Bastian

von Sebastian S. (sebastian_s25)


Lesenswert?

Ah... mir is grad was aufgefallen

ich wollte meinen C Code??

bin ich doof!!

Des is so ne Sache!! Also der komplette beinhaltet mitlerweile 10 .c und 
11 .h Files!! Ich glaub, da Blickt keiner durch, der sich nicht genauer 
mit dem Thema befasst...

Was soll ich genau schicken? Alles wo der USART vorkommt, vielleicht 
noch meinen SoftwareSPI, den ich verwende und das .c File fuer das RF 
Modul?

Oder will sich einer den ganzen Code zu Gemuete ziehen??

mfg
Bastian

von Herbert (Gast)


Lesenswert?

Hi

Vielleicht nochmal die Anschlüsse am SP3232EEN kontrollieren.
(Ausgänge - Eingänge vertauscht, etc.)

Die -3,3V klingen eher nach einem Schaltungsproblem
und nicht nach einem Softwarefehler.

MfG
Herbert

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Herbert

die 3,3 V kommen aber nur, wenn ich GND am Oszi nicht angeschlossen 
haben!! Dieses Messergebnis ist in meinen Augen nichts aussagend!!

Mir ging es hier eigentlich nur um die Rechtecksignale....

Ich habe schon den SP3232EEN meines Kollegen verwendet und hab hier auch 
keine Aenderung erreicht...

mfg
Bastian

von Herbert (Gast)


Lesenswert?

Hi,

kleiner Nachtrag:

Bin in C nicht so gut, daß ich dir weiterhelfen könnte.
Aber wenn du den Code hier reinstellst, kann ihn sich
vielleicht jemand anderer ansehen.

MfG
Herbert

von Herbert (Gast)


Lesenswert?

Hi

Sebastian S. schrieb:
> die 3,3 V kommen aber nur, wenn ich GND am Oszi nicht angeschlossen
> haben!! Dieses Messergebnis ist in meinen Augen nichts aussagend!!

OK das sehe ich auch so.

bleibt nur der Code

MfG
Herbert

von Sebastian S. (sebastian_s25)


Angehängte Dateien:

Lesenswert?

So

Ich habs jetzt in PDFs zusammengefasst. Das erste "RF_Relay_Box_V1.3" 
ist meine Mainroutine mit Headerdatei.

Hier warte ich ob ich von meinem Funkmodul einen Interrupt bekomme oder 
ob sich ein Schalter ein oder ausgeschaltet wurde.

Im USART sind alle meine USART Befehle und auch mein "Programmer Mode", 
in dem ich meinem Mikrocontroller neue Variablen uebergebe und spaeter 
ins EEPROM schreiben kann.

Software_SPI verwende ich nur noch, da auf die schnelle der normale SPI 
nicht funktioniert hat. Da hab ich irgendwie einen Fehler im Code, aber 
keine Zeit ihn zu suchen.

Im NRF_Modul sind alle meine Sende, Register les und schreib Befehle und 
in Pin_Change_Sensing ist meine routine fuer die 
Schalteraenderungserkennung dirn.

Viel Glueck damit

mfg
Bastian

PS: Es sind noch ein oder 2 andere Fehler drin, die ich aktuell grad am 
suchen bin....

von Peter D. (peda)


Lesenswert?

Kein Wunder, daß nichts funktioniert, der Compiler versteht kein PDF!
Code muß immer *.c heißen!
Und die *.h sind bestimmt auch notwendig.
Mehrere *.c, *.h zipt man bequemer Weise.


Peter

von Sebastian S. (sebastian_s25)


Angehängte Dateien:

Lesenswert?

Ok dann so....

Ich dachte mir zum lesen ists so einfacher....

Jetzt gibts das zip file. Mit dem kompletten Code, damit man es auch 
kompilieren koennte....


mfg

Bastian

von Dietrich L. (dietrichl)


Lesenswert?

Was mir noch gerade zum DC/DC-Wandler einfällt:
Sind C2, C3 und C15 wirklich je 47nF? Dann hättest Du eine sehr niedrige 
Frequenz und L1, C4 und C5 dürften dazu nicht passen.

Gruß Dietrich

von Sebastian S. (sebastian_s25)


Lesenswert?

Hallo Dietrich

Danke fuer den Hinweis!!! Jetzt weiss ich auch warum die Schaltung so 
laut war! ;)

Ich habe anscheinend beim Footprint wechseln auch den Kondensator an 
sich gewechselt... Aber der Ripple ist immer noch der selbe...

Ist schon irgendwem was fuer mein anderes Problem eingefallen?

Ich hab jetzt mal versucht einen 2.2 pF zwischen GND bzw. Vcc und PB7 zu 
schalten. Hat aber nichts gebracht...

mfg

Bastian

von ... (Gast)


Lesenswert?

Sebastian S. schrieb:
> Die Platinen wurden geordert

Sebastian S. schrieb:
> hab jetzt exact das gleiche Board nochmal geloetet und es funktioniert
>
> immer noch nicht so...

poste mal das Layout, vielleicht ist da ja der Wurm drin.

von Sebastian S. (sebastian_s25)


Lesenswert?

Hallo ...

Mein Layout kann keine Abweichung zum oben schon geposteten Plan haben!! 
Ich benutze Altium und habe hier auch schon mehrfach den Designrulecheck 
drüber laufen lassen!!

Plan und Layout sind vollkommen identisch!!

mfg

Bastian

von ... (Gast)


Lesenswert?

wenn ich mir deinen Code so anschaue wundert es mich, dass du da einen 
Software-SPI programmierst und das noch mit den normalen SPI-Pins.

1.Was soll das? Warum nutzt du nicht die eingebaute SPI-Einheit?

2. Ist deine Software-SPI interrupt gesteuert oder pollst du?

Das letztere würde erklären, dass der UART nur dann was rausgeben kann, 
wenn du an den Clock deiner Software-SPI ein Signal anlegst und sei es 
auch nur die Brummspannung von deinem Tastkopf ohne Masse.

von ... (Gast)


Lesenswert?

... schrieb:
> an den Clock deiner Software-SPI

Das ist im Übrigen PB7....

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi ...

Ich nehme den SoftwareSPI nur her, da ich ihn schon da hatte und ohne 
Probleme anwenden konnte. Fuer den normalen SPI hab ich noch keine Zeit 
gehabt...

Der Code, den ich verwenden wollte, hat nicht funktioniert. :(

Also Polling ist es nicht direkt was ich mache. Mein uC ist immer der 
Master, also brauch ich auch keinen Interrupt. Ich schreibe mein Bit und 
schaue kurz danach, was am MISO passiert ist.

... schrieb:
> Das letztere würde erklären, dass der UART nur dann was rausgeben kann,
> wenn du an den Clock deiner Software-SPI ein Signal anlegst und sei es
> auch nur die Brummspannung von deinem Tastkopf ohne Masse.

Kannst du das genauer erklaeren?

der UART hat doch nichts mit diesen Pins zu tun und die SPI Pins 
arbeiten bei mir als normale ein und Ausgaenge...

mfg
Bastian

von ... (Gast)


Lesenswert?

Sebastian S. schrieb:
> Also Polling ist es nicht direkt was ich mache. Mein uC ist immer der
>
> Master, also brauch ich auch keinen Interrupt. Ich schreibe mein Bit und
>
> schaue kurz danach, was am MISO passiert ist.

Ja, und das in einer Schleife aus der der µC nicht mehr raus kommt.

von Sebastian S. (sebastian_s25)


Lesenswert?

... schrieb:
> Sebastian S. schrieb:
>> Also Polling ist es nicht direkt was ich mache. Mein uC ist immer der
>>
>> Master, also brauch ich auch keinen Interrupt. Ich schreibe mein Bit und
>>
>> schaue kurz danach, was am MISO passiert ist.
>
> Ja, und das in einer Schleife aus der der µC nicht mehr raus kommt.

Hi ...

des kapier ich jetzt nicht...

wie soll der uC hier nicht rauskommen??
1
/******* SSPI Write **************/
2
3
void SSPI_Write_byte(uint8_t Byte)
4
{
5
  uint8_t bits = 0x80;      // MSB first (LSB first => 0x01)
6
  
7
  while(bits)
8
  {
9
    if( Byte & bits )
10
    {
11
      Set_SMOSI;
12
    }
13
    else
14
    {
15
      Clear_SMOSI;
16
    }
17
    _delay_us(10);
18
    SSCK_Hi;
19
    _delay_us(10);
20
    SSCK_Lo;
21
    bits = bits>>1;        // schiebt nach links bis 1 rausfaellt (LSB fist <<)
22
  }
23
}
24
25
/******* SSPI Read **************/
26
27
uint8_t SSPI_Read_byte(uint8_t Byte)
28
{
29
  uint8_t bits = 0x80;      // MSB first (LSB first => 0x01)
30
  unsigned char data_receive = 0x00;
31
  
32
  while(bits)
33
  {
34
    if( Byte & bits )
35
    {
36
      Set_SMOSI;
37
    }
38
    else
39
    {
40
      Clear_SMOSI;
41
    }
42
    _delay_us(10);
43
    SSCK_Hi;
44
    _delay_us(10);
45
    if(SMISO_PIN & (1<<SMISO))
46
    {
47
      data_receive |= bits;
48
      
49
    }
50
    SSCK_Lo;
51
    bits = bits>>1;        // schiebt nach links bis 1 rausfaellt (LSB fist <<)
52
  }
53
  return data_receive;
54
}

und diese Funktionen werden ja nur immer wieder mal aufgerufen.

Koenntest du vielleicht auf ne konkrete stelle verweisen?


mfg

Bastian

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Leute

mir is jetzt unterm "rumbastln" was aufgefallen.

mein uC kann sehr wohl alles empfangen!! nur das raus senden 
funktioniert anscheinend nicht!!

Ich hab jetzt selber noch nachgeschaut und nichts gefunden wo er hängen 
könnte....

Aber ich hab ehrlich gesagt nicht grad ein Auge fürs Fehler finden...


mfg
Bastian

von Sebastian S. (sebastian_s25)


Lesenswert?

Hi Leute

also bis jetzt bin ich noch nicht drauf gekommen, was noch fehlen 
koennte...

Erst recht, weil ein Kumpel von mir bei einem ATmega168 meinen SSPI Code 
verwendet und bei ihm der USART funktioniert!

Er hat die Anschluesse genau wie ich an den SPI Ports und verwendet 
sonst auch die gleiche Logik und sonst auch meine Funktionen...

Was koennte das jetzt noch sein?

mfg
Bastian

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.