Hallo, von Microchip gibt es ein paar Beispiele zum ECAN des dsPIC33E. Alle recht ähnlich und leider (?) alle mit DMA. Kann man den ECAN auch ohne DMA betreiben oder geht das nicht ohne? Hat/kennt jemand vielleicht ein Beispiel für ECAN ohne DMA? Schöne Grüße, Robert
Hatte ich neulich auch mal kurz probiert. So wie ich das sehe hat das ECAN Modul keine Register über die CAN-Msg's ausgetauscht werden können. Es wird wohl nur über DMA gehen. Nachdem ich mich aber eine Weile über das schnarchlangsame Debugging geärgert habe, ist der dsPIC wieder in die Kiste gewandert. Ich verwende schon ein IDC3. Wenn man nie was anderes gekannt hat mag das ja gehen. Normalerweise arbeite ich mit Crossworks und jlink. Den dsPic habe ich durch einen LPC11C14 ersetzt und gut. Niewieder zurück war mein Fazit. Trotzdem interessiert es mich auch ob DMA bein dsPIC33E zwingend ist.
Hi, ich glaube das ist nicht wirklich vorgesehen. Und warum sollte man das tun? was habt ihr gegen DMA? Gruß
Markus schrieb: > ich glaube das ist nicht wirklich vorgesehen. > Und warum sollte man das tun? was habt ihr gegen DMA? Eigentlich nichts. Ist bei mir nur das erste mal, dass mir das in der Form zwingend untergekommen ist. Die 10 Zeilen Code um die DMA Kanäle zu initialisieren sind nicht weiter schlimm. Deshalb ist die Frage auch ehr akademischer Art.
aah, ok ich hatte das mal länger versucht, ohne Erfolg, da die älteren Revisionen von dem von uns verwendeteten Typ hier einen Fehler hatte. Hatte dann einen anderen Workaround gefunden.
Wenn ich eines der Beispiel-Projekte für den dsPIC33EP256MC506 übersetzen möchte, erhalte ich folgende Fehlermeldungen: (ich habe bereits #include "p33exxxx.h" in ECAN1Config.c ergänzt, ist scheinbar original nur für PIC24 und PIC33F verwendbar) In file included from ECAN1Config.C:59: ../h/ECAN1Config.h:66: warning: space(dma) not supported on this target, ignoring ECAN1Config.C: In function 'dma0init': ECAN1Config.C:65: error: 'DMACS0' undeclared (first use in this function) ECAN1Config.C:65: error: (Each undeclared identifier is reported only once ECAN1Config.C:65: error: for each function it appears in.) ECAN1Config.C:66: error: 'DMA0CON' undeclared (first use in this function) ECAN1Config.C:67: error: 'DMA0PAD' undeclared (first use in this function) ECAN1Config.C:68: error: 'DMA0CNT' undeclared (first use in this function) ECAN1Config.C:69: error: 'DMA0REQ' undeclared (first use in this function) ECAN1Config.C:70: error: 'DMA0STA' undeclared (first use in this function) ECAN1Config.C:71: error: 'DMA0CONbits' undeclared (first use in this function) ECAN1Config.C: In function 'dma2init': ECAN1Config.C:79: error: 'DMACS0' undeclared (first use in this function) ECAN1Config.C:80: error: 'DMA2CON' undeclared (first use in this function) ECAN1Config.C:81: error: 'DMA2PAD' undeclared (first use in this function) ECAN1Config.C:82: error: 'DMA2CNT' undeclared (first use in this function) ECAN1Config.C:83: error: 'DMA2REQ' undeclared (first use in this function) ECAN1Config.C:84: error: 'DMA2STA' undeclared (first use in this function) ECAN1Config.C:85: error: 'DMA2CONbits' undeclared (first use in this function) ECAN1Config.C: In function 'ecan1ClkInit': ECAN1Config.C:95: error: 'C1CTRL1bits' undeclared (first use in this function) ECAN1Config.C:107: error: 'C1CFG1bits' undeclared (first use in this function) ECAN1Config.C:113: error: 'C1CFG2bits' undeclared (first use in this function) ECAN1Config.C: In function 'ecan1Init': ECAN1Config.C:132: error: 'C1CTRL1bits' undeclared (first use in this function) ECAN1Config.C:137: error: 'C1FCTRLbits' undeclared (first use in this function) ECAN1Config.C:189: error: 'C1RXFUL1' undeclared (first use in this function) ECAN1Config.C:189: error: 'C1RXFUL2' undeclared (first use in this function) ECAN1Config.C:189: error: 'C1RXOVF1' undeclared (first use in this function) ECAN1Config.C:189: error: 'C1RXOVF2' undeclared (first use in this function) ECAN1Config.C:190: error: 'C1TR01CONbits' undeclared (first use in this function) ECAN1Config.C:192: error: 'C1TR23CONbits' undeclared (first use in this function) ECAN1Config.C:194: error: 'C1TR45CONbits' undeclared (first use in this function) Manche der Register (wie DMACS0) finde ich nicht einmal im Datasheet ( http://ww1.microchip.com/downloads/en/DeviceDoc/70000657H.pdf ), manche (wie C1RXFUL1) scheint es zu geben, aber der C Compiler kennt sie nicht... Und dann noch die Meldung "space(dma) not supported on this target", wobei der dsPIC33EP256MC506 aber DMA können sollte? Hat vielleicht jemand einen Tipp?
"p33exxxx.h".....ist für den C30 Compiler. Falls du den XC16 verwendest ist es "xc.h"
Ich verwende noch die alte IDE mit dem alten Compiler ...\mplabc30\v3.31\bin\pic30-gcc.exe
Robert Meier schrieb: > Ich verwende noch die alte IDE mit dem alten Compiler > ...\mplabc30\v3.31\bin\pic30-gcc.exe Dann solltest Du mal updaten.
Kann ich leider derzeit nicht... Alter Compiler mit alter bezahlter Lizenz und Lib, die mit neuer Compiler-Version nicht kompatibel ist... Ist das mit dem alten Compiler ein Problem?
Robert Meier schrieb: > Kann ich leider derzeit nicht... > Alter Compiler mit alter bezahlter Lizenz > und Lib, die mit neuer Compiler-Version nicht kompatibel ist... > > Ist das mit dem alten Compiler ein Problem? Ich weiß nicht, wie vollständig der Support für PIC24EP und dsPIC33EP im C30 ist. Ein paar kleine Unterschiede gibts da ja doch. fchk
Robert Meier schrieb: > Ist das mit dem alten Compiler ein Problem? Möglich. Die letzte Version des C30 ist 3.31 und die stammt von Jänner 2012.
Ok, ich hab jetzt mal MPLAB-X installiert, XC16 und das Projekt ohne Library übersetzt, oder zumindest versucht. Folgendes habe ich (in allen Files) angepasst: #if 0 #if defined(_dsPIC33F_) #include "p33fxxxx.h" #elif defined(_PIC33E_) #include "p33exxxx.h" #elif defined(_PIC24H_) #include "p24hxxxx.h" #endif #endif // 0 #include <xc.h> Die beiden folgenden Register will er trotzdem noch nicht: DMACS0=0; ... DMA2STA= __builtin_dmaoffset(ecan1msgBuf); DMACS0 finde ich auch im Datasheet des dsPIC33EP256MC506 nicht. DMACS0 scheint Collision Flags zu beinhalten. Vielleicht folgender Ersatz: // DMACS0=0; DMAPWC=0; DMARQC=0; DMA2STA finde ich auch im Datasheet des dsPIC33EP256MC506 nicht. Es gibt aber die folgenden 2 Register: DMA2STAL und DMA2STAH. Ich vermute, dass DMA2STAx jetzt einen erweiterten Adressbereich abdeckt? Ob das Makro jetzt auch eine größere Adresse meldet? Ich habe folgendes gefunden: ( http://ww1.microchip.com/downloads/en/DeviceDoc/70348C.pdf Seite 26) // DMA2STA= __builtin_dmaoffset(ecan1msgBuf); DMA2STAH= 0x0000; DMA2STAL= __builtin_dmaoffset(ecan1msgBuf); Die anderen DMA-Register und ECAN-Register scheint er jetzt zu kennen. Wenn ich die obigen Stellen verändere, dann gibt es nur noch diesen Fehler: Link Error: The used device does not support DPSRAM build/default/production/_ext/1472/main.o: Link Error: Could not allocate section _03E9F2A053396484, size = 512 bytes, attributes = bss dma Link Error: Could not allocate data memory DPSRAM scheint Dual Ported SRAM zu sein, was er für DMA braucht. Jemand eine Idee? Muss man da noch etwas im LinkerScript eintragen?
Hallo Robert, hast du das Problem gelöst? bin jetzt auch drauf gestossen beim Portieren von dsPIC33F auf dsPIC33E
Wenn man auf http://www.microchip.com/TechDoc.aspx?type=CodeExamples nach "ECAN" (im Document Title) sucht, bekommt man auch dsPIC33E Beispiele: dsPIC33EPxxxGMxxx_ce427_ecan_crosswire 15 Oct 2013 dsPIC33EPxxxGMxxx_ce428_ecan_fifo 15 Oct 2013 dsPIC33EPxxxGMxxx_ce429_ecan_rtr 15 Oct 2013 Vielleicht hilft dir dies weiter...
Hi, ist das Problem schon gelöst bei euch. bei läuft schon mit dspic33F aber mit dspic33EP hat diese gleiche Error getroffen. "The used device does not support DPSRAM " ich habe alle Register schon angepasst ging aber nicht. habe zwei ECAN. also wenn irgendjemand weis der Grund, bitte melden Danke
@Salman Wenn man auf http://www.microchip.com/TechDoc.aspx?type=CodeExamples nach "ECAN" (im Document Title) sucht, bekommt man auch dsPIC33E Beispiele: dsPIC33EPxxxGMxxx_ce427_ecan_crosswire 15 Oct 2013 dsPIC33EPxxxGMxxx_ce428_ecan_fifo 15 Oct 2013 dsPIC33EPxxxGMxxx_ce429_ecan_rtr 15 Oct 2013 Vielleicht hilft dir dies weiter...
Dann such mal nach "dma" oder "space(dma)" in deinen Sourcen, das sollten die Problemstellen sein (war das nicht in main, ist schon lange her...). Evt. "space(dma)" mal auskommentieren?
Auch wenn der Beitrag schon älter ich, ich hatte gerade das selbe Problem. Falls das gleiche Problem nochmal jemand hat, mit ... unsigned int ecan1msgBuf[32*8]; ... DMA2STAH= 0x0000; DMA2STAL= &ecan1msgBuf; geht es
Ich habe ein ähnliches Problem. Hatte lauffähigen Code vom 33F, den hab ich aber nicht zum laufen bekommen. Das TXREQ Bit wurde nie zurückgesetzt und es kam nichts aus dem Pin. Mitterweile habe ich umgebaut auf den Beispielcode aus dem Datenblatt. Leider mit dem gleichen Ergebnis. Hat jemand eine Idee?
Datenblatt von 33E oder vom 33F? Ich verwende andere Attribute für den RAM Bereich für die EP Familie:
1 | __eds__ ECAN_MSGBUF_T ecanMsgBuf __attribute__((eds,space(dma),aligned(ECAN_MSG_BUF_LENGTH*16))); |
Diese Zeile unterscheidet sich von Familie zu Familie.
Steffen R. schrieb: > Datenblatt von 33E oder vom 33F? 24E/33E http://ww1.microchip.com/downloads/en/DeviceDoc/70353C.pdf S. 35 Aber das ist wohl für den C30, ich verwende den XC16. Und Microchip ist leider nicht für Fehlerfreie Beispielcodes bekannt. Ich versuch das mit dem Attribut mal, vielleicht bringt es ja was.
Und unbedingt auch die angrenzenden Kapitel lesen, wie DMA und RAM (natürlich von verwendeten Controller!) z.B.: -------------- 4.2.6 DMA RAM Each dsPIC33EPXXX(GP/MC/MU)806/810/814 and PIC24EPXXX(GP/GU)810/814 device contains 4 Kbytes of dual ported DMA RAM located at the end of Y data RAM and is part of Y data space. Memory locations in the DMA RAM space are accessible simultaneously by the CPU and the DMA Controller module. -------------- Die Beispiele von einem "ähnlichen" Controller können als Anhaltspunkt dienen. Müssen aber ggf. an den eigenen Controller angepasst werden.
Ich weiss nicht ob es da einen Unterschied zwischen EP und dem Ev gibt? Bei mir wird der 33EV256GM104 verwendet. Die Deklaration habe ich umgebaut auf: _eds_ unsigned int ecan1MsgBuf[NUM_OF_ECAN_BUFFERS][8] _attribute__((eds,space(dma),aligned(NUM_OF_ECAN_BUFFERS * 16))); Der Puffer wird bei Adresse 0x4C00 angelegt, das klingt erstmal nicht falsch. Ich habe sicherheitshalber auch schon einen anderen Pin verwendet, aber denke nicht dass es daran liegt. Mit C1CTRL1bits.REQOP = 0; geht der Pin hoch, scheinbar wird der Pin also vom Modul übernommen. Der Errorcounter (C1EC) zeigt 0 an. Die Interrupts (C1INTF) sind auch auf 0. Empfangen geht übrigens auch nicht. Für weitere Ideen wäre ich dankbar.
Ich habe hier einen wenigstens 1 Jahr alten Test mit einem dsPIC33EP64MC502. Der ist sicher nur ähnlich aber der ECAN Teil ist gelaufen mit XC16 und C30. Da ich selber nichts mehr mit PICs mache (das debuggen nervt einfach nur wenn man cortexe gewohnt ist) kann ich dir aber keine weitere Unterstützung mehr geben. Die Kommentaren im Code müssen auch nicht stimmen, es war hier auch viel Probiererei angesagt. Ich habe es eben nochmal probiert. Es geht jedenfalls und sendet die Message 0x1D3. Nachdem 0x1D0 durch den Messagefilter ging, wird wieder 0x1D3 gesendet. Vielleicht hilft dir das irgendwie.
1 | #include <p33Exxxx.h> |
2 | |
3 | #define FCY 60000000
|
4 | #include <libpic30.h> |
5 | #include <stdint.h> |
6 | |
7 | #define Delay_us __delay_us
|
8 | |
9 | _FOSCSEL(FNOSC_FRC) |
10 | |
11 | // Enable clock switching and fail safe clock monitor disabled
|
12 | _FOSC(FCKSM_CSECMD & OSCIOFNC_ON & IOL1WAY_OFF) |
13 | |
14 | // Watchdog aus
|
15 | _FWDT(FWDTEN_OFF) |
16 | |
17 | _FICD(ICS_PGD2 & JTAGEN_OFF) |
18 | |
19 | void SysInit() |
20 | {
|
21 | // Configure Oscillator to operate the device at 60Mhz
|
22 | // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2
|
23 | // Fosc= 7.37*(65)/(2*2)=120Mhz for Fosc, Fcy = 60Mhz
|
24 | |
25 | // Configure PLL prescaler, PLL postscaler, PLL divisor
|
26 | PLLFBD = 63; // M = PLLFBD + 2 |
27 | CLKDIVbits.PLLPOST = 0; // N1 = 2 |
28 | CLKDIVbits.PLLPRE = 0; // N2 = 2 |
29 | |
30 | __builtin_write_OSCCONH(0x01); // New Oscillator selection FRC w/ PLL |
31 | __builtin_write_OSCCONL(0x01); // Enable Switch |
32 | |
33 | while (OSCCONbits.COSC != 0b001); // Wait for Oscillator to switch to FRC w/ PLL |
34 | while (OSCCONbits.LOCK != 1); // Wait for Pll to Lock |
35 | Delay_us(200); |
36 | }
|
37 | |
38 | |
39 | #define CAN_OPMODE_CONFIG 0x4
|
40 | #define CAN_OPMODE_LOOPBACK 0x2
|
41 | #define CAN_OPMODE_NORMAL 0x0
|
42 | #define NUM_OF_ECAN_BUFFERS 32
|
43 | |
44 | uint16_t m_Can_ECanTXRXMsgBuf[NUM_OF_ECAN_BUFFERS][8] __attribute__((aligned(NUM_OF_ECAN_BUFFERS * 16))); |
45 | |
46 | void Can_Init() |
47 | {
|
48 | // Can Rx/Tx den Pins zuweisen
|
49 | // Unlock Registers
|
50 | __builtin_write_OSCCONL(OSCCON & 0xbf); |
51 | |
52 | // IO Register initialisieren RPINR26 = RP39 0x27
|
53 | RPINR26 = 0x27; |
54 | // Output RP41 to C1TX (0xE oder 14) setzen
|
55 | RPOR3bits.RP41R = 0xE; |
56 | |
57 | // Lock Registers
|
58 | __builtin_write_OSCCONL(OSCCON | 0x40); |
59 | |
60 | |
61 | // Can Baustein in Konfigurationsmode versetzen
|
62 | C1CTRL1bits.REQOP = CAN_OPMODE_CONFIG; |
63 | while(C1CTRL1bits.OPMODE != CAN_OPMODE_CONFIG) |
64 | ;
|
65 | |
66 | C1CTRL1bits.CANCKS = 0; |
67 | C1CTRL1bits.CSIDL = 0; |
68 | C1CTRL1bits.CANCAP = 0; |
69 | |
70 | // ermittelt mit dem bittime calc Plugin
|
71 | C1CFG1=0x001A; |
72 | C1CFG2=0x0059; |
73 | |
74 | C1FCTRL = 0xC01F; |
75 | |
76 | /* DMA Config Channel 0 for TX IRQ = 70 */
|
77 | DMA0CON = 0x2020; |
78 | DMA0REQ = 70; |
79 | DMA0CNT = 7; |
80 | DMA0PAD = (volatile unsigned int)&C1TXD; |
81 | DMA0STAL = (unsigned int) &m_Can_ECanTXRXMsgBuf; |
82 | DMA0STAH = 0; |
83 | DMA0CONbits.CHEN = 0x1; |
84 | |
85 | DMA2CON = 0x0020; |
86 | DMA2REQ = 34; |
87 | DMA2CNT = 7; |
88 | DMA2PAD = (volatile unsigned int) &C1RXD; |
89 | DMA2STAL = (unsigned int) &m_Can_ECanTXRXMsgBuf; |
90 | DMA2STAH = 0; |
91 | DMA2CONbits.CHEN=1; |
92 | |
93 | //IEC0bits.DMA1IE = 1;
|
94 | |
95 | /* Set SFR Window to Buffer register in RAM */
|
96 | C1CTRL1bits.WIN = 1; |
97 | /* RX Filter */
|
98 | /* Select Acceptance Filter Mask 0 for Acceptance Filter 0 */
|
99 | C1FMSKSEL1bits.F0MSK = 0x0; |
100 | /* Configure Acceptance Filter Mask 0 register to mask SID<2:0>
|
101 | * Mask Bits (11-bits) : 0b111 1111 1000 */
|
102 | C1RXM0SIDbits.SID = 0x7F8; |
103 | // C1RXM0SIDbits.SID = 0x000;
|
104 | |
105 | /* Configure Acceptance Filter 0 to match standard identifier
|
106 | Filter Bits (11-bits): 0b011 1010 xxx with the mask setting, message with SID
|
107 | range 0x1D0-0x1D7 will be accepted by the ECAN module. */
|
108 | C1RXF0SIDbits.SID = 0x01D0; |
109 | /* Acceptance Filter 0 to check for Standard Identifier */
|
110 | C1RXM0SIDbits.MIDE = 0x1; |
111 | // C1RXM0SIDbits.MIDE = 0x0;
|
112 | C1RXF0SIDbits.EXIDE = 0x0; |
113 | /* Acceptance Filter 0 to use Message Buffer 10 to store message */
|
114 | C1BUFPNT1bits.F0BP = 0xA; |
115 | /* Filter 0 enabled for Identifier match with incoming message */
|
116 | C1FEN1 = 0x0; |
117 | C1FEN1bits.FLTEN0 = 0x1; |
118 | |
119 | /* Set SFR Window to Control register in RAM */
|
120 | C1CTRL1bits.WIN = 0; |
121 | |
122 | |
123 | // Configure Message Buffer 0 for Transmission and assign priority
|
124 | C1TR01CONbits.TXEN0 = 0x1; |
125 | C1TR01CONbits.TX0PRI = 0x3; |
126 | |
127 | // C1TR01CONbits.TXEN1 = 0x0;
|
128 | // C1TR01CONbits.TX1PRI = 0x3;
|
129 | |
130 | |
131 | // start Can
|
132 | C1CTRL1bits.REQOP = CAN_OPMODE_NORMAL; |
133 | while(C1CTRL1bits.OPMODE != CAN_OPMODE_NORMAL) |
134 | ;
|
135 | |
136 | //C1CTRL1bits.REQOP = CAN_OPMODE_LOOPBACK;
|
137 | //while(C1CTRL1bits.OPMODE != CAN_OPMODE_LOOPBACK)
|
138 | // ;
|
139 | |
140 | m_Can_ECanTXRXMsgBuf[0][0] = 0x01D3 << 2; // IDE, SRR = 0 SID = 1D2 |
141 | m_Can_ECanTXRXMsgBuf[0][1] = 0x0000; // EID = 0 |
142 | m_Can_ECanTXRXMsgBuf[0][2] = 0x0008; // RTR = 0, DLC = Data Length counter = 8 = 8 Wörter sollen übertragen werden |
143 | m_Can_ECanTXRXMsgBuf[0][3] = 0xabcd; |
144 | m_Can_ECanTXRXMsgBuf[0][4] = 0xabcd; |
145 | m_Can_ECanTXRXMsgBuf[0][5] = 0xabcd; |
146 | m_Can_ECanTXRXMsgBuf[0][6] = 0xabcd; |
147 | |
148 | // Empfangspuffer leer setzen
|
149 | C1RXFUL1 = 0; |
150 | |
151 | |
152 | while (1) |
153 | {
|
154 | // Request sende Nachricht
|
155 | C1TR01CONbits.TXREQ0 = 0x1; |
156 | |
157 | // Warte auf gesendet
|
158 | while(C1TR01CONbits.TXREQ0 == 1); |
159 | |
160 | Delay_us(100000); |
161 | |
162 | // Message was received.
|
163 | while (C1RXFUL1bits.RXFUL10 == 0); |
164 | C1RXFUL1bits.RXFUL10 = 0; |
165 | uint16_t test = m_Can_ECanTXRXMsgBuf[10][0]; |
166 | test = test >> 2; |
167 | }
|
168 | }
|
169 | |
170 | int main() |
171 | {
|
172 | |
173 | SysInit(); |
174 | Can_Init(); |
175 | }
|
Danke temp für den Code. Ich habe ihn 1:1 kopiert, gleiches Ergebnis, bleibt beim TXREQ0 hängen und es kommt nichts raus. Hat es schon mal jemand geschafft auf nem 33EV den CAN zum laufen zu bekommen?
Hast du außer dem PIC noch etwas am CAN-Bus hängen? Einen CAN-Analyzer? Andere Nodes? Wie misst du, dass nichts raus kommt? Mit dem Oszi o.ä.? Welcher CAN-Transceiver? Hast du den Bus terminiert bzw. weißt du, dass der Bus sonst funktioniert?
Wird das TXREQ Bit erst gelöscht wenn das ACK Bit erkannt wurde? Würde er auf das ACK Bit warten hätte ich das am error counter sehen müssen, der bleibt auf 0. Ich habe direkt am TX Pin mit dem Oszi gemessen. Mit und ohne CAN Analyser (der würde auch das ACK Bit setzen). Auch mit und ohne Terminierung. Transceiver ist der MCP2551.
Mit diesen DMA Einstellungen gehts jetzt:
1 | DMA0CON = 0x2020; //DIR: DMA RAM -> Peripheral adress 0x0442 |
2 | DMA0PAD = (volatile unsigned int)&C1TXD; //Adress of C1TX |
3 | DMA0CNT = 7; |
4 | DMA0REQ = 0x0046; //C1TX - ECAN1 Transmit Data Request |
5 | DMA0STAH = 0x0000; //Primary DMA write Start Adress |
6 | DMA0STAL = (unsigned int) &CAN1_txMsgBox; |
7 | DMA0CONbits.CHEN = 1; //Channel 0 Enabled |
8 | |
9 | DMA2CON = 0x0000; //DIR: Peripheral adress -> DMA RAM 0x0440 |
10 | DMA2PAD = (volatile unsigned int) &C1RXD; //Adress of C1RX |
11 | DMA2CNT = 7; |
12 | DMA2REQ = 0x0022; //C1RX - ECAN1 Receive Data Request |
13 | DMA2STAL = (unsigned int) &CAN1_rxMsgBox; //Primary DMA read Start Adress |
14 | DMA2STAH = 0x0000; |
15 | DMA2CONbits.CHEN = 1; //Channel 2 Enabled |
Die eine Richtung müsste jetzt im Ping-Pong laufen, die andere nicht. Warum das so funktioniert kann ich leider nicht erklären.
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.