ATmega 164P USART funktioniert nur mit beschaltung auf PB7

OP #2482897
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
Gast #2483078
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.
OP #2483079
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?
Gast #2483331
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.
OP #2484782
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
Gast #2484792
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
OP #2484810
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
Angehängte Dateien:
Gast #2484836
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
OP #2485215
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
#2485314
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
Gast #2489937
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
OP #2489946
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
Gast #2489954
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
OP #2489957
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
OP #2489980
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....
Angehängte Dateien:
OP #2492479
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
Gast #2492876
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.
OP #2493961
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
OP #2493997
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
OP #2495798
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
OP #2504796
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren