Hi, ich glaube ich habe einen riesigen Fehler gemacht. Habe einen PIC16F737 durch einen PIC16F193X ersetzt, da laut der Microchip Auswahlseite: http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002&mid=10&lang=en&pageId=74# Der letztere in allen Punkten besser ist und auch noch erheblich günstiger. Nun finde ich allerdings im Datenblatt bei den Baudrate-Tabellen auf Seite 227 keinen passenden Eintrag für 250000. Sollte ich mir tatsächlich ins eigenen Bein geschossen haben und es ist bei dem PIC16F193X unmöglich 250k-Baud einzustellen? Ich habe den Chip natürlich schon gekauft :( Gibt es eine Rettung oder kann ich gleich eine neue Bestellung aufgeben und den PIC16F7x7 nachordern? Grüße Oekel
:
Verschoben durch Moderator
Ist wahrscheinlich in der Tabelle nicht aufgeführt weil die Abweichung der erzeugten Baudrate von den theoretischen 250kB zuviel abweicht. Beim F737 gibt es ja eine Einstellung welche exakt 250kBaud erreicht. Wie genau müssen die 250 kBaud sein? Bei Fosc=32MHz, SYNC=0, BRGH=1, BRG16=0 und SPBRG=16 schafft man 117kBaud. Mit SPBRG=7 (oder 6) sollte man auf 250kBaud(+/-) kommen. Habe es nicht probiert, davon abgesehen kann man sich jede beliebe Baudrate selbst auserechnen und die Abweichung kontrollieren. Die Formeln dafür finden sich irgendwo bei den Baudraten-Tabellen....
Hz SPBGR Baud 32000000 64 1 250000 8000000 16 1 250000 16000000 16 3 250000 32000000 16 7 250000 Habe ich mich jetz verrechnet oder geht es mit SPBGR=1,3,7 doch? Fall ja, kann ich es nicht ganz nachvollziehen, dass Tabellen aufgeführt werden und 250k nicht mit abgebildet sind. Grüße Oekel
Ich habe es vorhin nicht nachgerechnet sondern nur Daumen * pi geschätzt und in den Tabellen sind die 250kBaud nicht aufgeführt weil es sich um keinen Standardwert handelt (meine Vermutung). 32Mhz, SYNC=0, BRGH=1, BRG16=1 (ergibt Multiplikator x4): SPBRG = (32000000/250000/4)-1 = 31 Kontrolle: 32000000 / 4 /(SPBRG+1) = 250000 Also hängt die Abweichung nur von der Genauigkeit des Quarzes ab.
Chris B. schrieb: > 32Mhz, SYNC=0, BRGH=1, BRG16=1 (ergibt Multiplikator x4): > SPBRG = (32000000/250000/4)-1 = 31 > Kontrolle: 32000000 / 4 /(SPBRG+1) = 250000 Stimmt, aber SPBRG = (32000000/250000/64)-1 = 1 Kontrolle: 32000000 / 64 /(SPBRG+1) = 250000 ;) Welches ist besser? (bitte weiterlesen...) Also scheinbar verstehe ich den Hintergrund der besagten Formeln/Tabellen noch nicht richtig, denn SPBRG von mir (s.o.) und deiner weichen ja erheblich voneinander ab. (Am liebsten würde ich ja den "Internal Oscillator Block" verwenden. Daher also 8Mhz oder 16Mhz) Ich lese die "TABLE 20-3: BAUD RATE FORMULAS" auf Seite 226. Nach dieser Tabelle erhalte ich 3 verschiedene Formeln für SYNC = 0; mit den Faktoren 4,16,64. Nehme ich nun meine Wunschfrequenzen von 8,16Mhz so erhalte ich mit einem Faktor von 4: 8000000 mit SPBGR=7; BRG16 =1; BRGH = 1; Faktor von 4: 16000000 mit SPBGR=15; BRG16 =1; BRGH = 1; Faktor von 16: 8000000 mit SPBGR=1; BRG16 =1; BRGH = 0; Faktor von 16: 16000000 mit SPBGR=3; BRG16 =1; BRGH = 0; ABER auch: Faktor von 16: 8000000 mit SPBGR=1; BRG16 =0; BRGH = 1; Faktor von 16: 16000000 mit SPBGR=3; BRG16 =0; BRGH = 1; Nun frage ich mich, welche Variante ich nehmen sollte? Und dieser ominöse "Faktor"/Multiplikator tritt auch nur in der Formel auf und wird von Chip automatisch ermitteln, sobald BRG16+BRGH gesetzt/gelöscht werden? Oder muss ich diesen Wert irgendwo in ein anderes Register mit eintragen? Grüße Oekel
D a v i d K. schrieb: > Also scheinbar verstehe ich den Hintergrund der besagten > > Formeln/Tabellen noch nicht richtig, denn SPBRG von mir (s.o.) und > > deiner weichen ja erheblich voneinander ab. ??? Tabelle 25.3 zeigt doch deutlich die verwendeten Formeln bei den einzelnen SYNC/BRG16/BRGH Einstellungen. Zur Kontrolle: 2400 Baud, 8Mhz, SYNC=0, BRGH=0, BRG16=0 ergibt laut Tabelle 25.3 einen Multiplikator von 64. 8000000/64/2400 = 52,083333 - 1 = 51 was genau mit der Tabelle 25.3 übereinstimmt. Interner Oscillator: der sollte von Werk aus Kalibriert sein (notfalls kann man sich mit einem Testprogramm und dem OSCTUNE Register das selbst überprüfen/ändern) ABER der ist nicht besonders temperaturstabil und ich habe keine Ahnung in welcher Umgebung/Temperaturbeeich deine Schaltung arbeitet und ob dann die Toleranzen für eine fehlerfreie Übertragung eingehalten werden.
Bitte jetzt nicht böse sein, aber bisher hat mir jeder der geantwortet hat eine Rechnung präsentiert, die zwar richtig ist... ...ABER nicht meine Wunschwerte verwendet und/oder meine Fragen beantwortet. Ich bin durchaus in der Lage eine Gleichung aufzustellen. Doch wie bereits oben mehrmals geschrieben gibt es zu meiner Baudrate von 250000 (und generell wohl auch) mehrere Formeln. Ergo möchte ich wissen, ob diese zu gleichwertigen Lösungen führen und wo dann der genaue Unterschied ist. Noch mal als Frage ;) Gibt es nur eine Lösung für 250kBaud und 8Mhz/16Mhz? Wenn ja welche und mit welcher Begründung sind die anderern falsch? Grüße Oekel
D a v i d K. schrieb: > Noch mal als Frage ;) > Gibt es nur eine Lösung für 250kBaud und 8Mhz/16Mhz? > Wenn ja welche und mit welcher Begründung sind die anderern falsch? Die Frage läuft darauf hinaus ob 3 x 4 das gleiche wie 4 x 3 ist. Es geht um einen Baudratengenerator. Dessen Frequenz bestimmt die Geschwindigkeit mit der die einzelnen Bits auf einen Ausgang geschoben werden. Es ist völlig egal wie diese Frequenz (mittels Vorteiler) zu Stande kommt, Hauptsache Sie stimmt. Mehr ist da nicht. Eine Google suche nach pic baudrate generator fördert übrigens eine Unzahl von tools zutage mit denen man spielen kann. Bei 250k Baudrate kann manchmal auch 256kB gemeint sein.
Ausprobieren. Bei 8Mhz hast du ohnehin nicht viele Möglichkeiten und ich wüsste keine Grund warum eine der 3 Registerkombinationen NICHT gehen sollte (da alle 3 ohnehin "keinen" Baudratenfehler produzieren). Falls unerwartet eine Einstellung nicht funkteonieren sollte, dauert eine Programmänderung und neu Flashen gerade mal 1-2 Minuten ;-)
D a v i d K. schrieb: > Wenn ja welche und mit welcher Begründung sind die anderern falsch? Falsch ist eigentlich keine. Warum es Lösungen mit unterschiedlichen BRGH und BRG16 Einstellungen gibt, steht im Datenblatt Kapitel 25.3: ..... Typical baud rates and error values for various asynchronous modes have been computed for your convenience and are shown in Table 25-3. It may be advantageous to use the high baud rate (BRGH = 1), or the 16-bit BRG (BRG16 = 1) to reduce the baud rate error. The 16-bit BRG mode is used to achieve slow baud rates for fast oscillator frequencies. ..... Es häng ausschließlich davon ab mit welcher Einstellung du den geringsten Baudratefehler erzeugts.
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.