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
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
>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.
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?
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
Für RS-232 mußt Du nicht nur RXD, TXD, sondern auch GND verbinden!!! Peter
Hi Peter das hab ich auch getan!! da ich einen "externen" Max232 verwende, hab ich GND und Vcc standartmässig angschlossen. mfg Bastian
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.
Peter Dannegger schrieb: > Für RS-232 mußt Du nicht nur RXD, TXD, sondern auch GND verbinden!!! RS232 != USART
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
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
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
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
Hier ist er!! Sorry, dachte der waere nicht notwendig... mfg Bastian
Ist die Leiterplatte selbst hergestellt? Wenn ja, auf Unterbrechungen in den Zuleitungen von GND und VCC prüfen.
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?
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.
Michael schrieb: > Die muss auf jedn > > fall vor die Spule sonst erfüllt sie ja nicht ihren Zweck. Genau da sitzt sie ja auch.
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
Hi wie gesagt, die kommen morgen. hab sie grad nicht da. mfg Bastian
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
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
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
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
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
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
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
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
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
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
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....
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
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
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
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
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.
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
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.
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
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.
... 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.