Forum: Mikrocontroller und Digitale Elektronik 250k Baud beim PIC16F193X


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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
von Chris B. (dekatz)


Lesenswert?

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....

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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

von Chris B. (dekatz)


Lesenswert?

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.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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

von Chris B. (dekatz)


Lesenswert?

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.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

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

von Der Rächer der Transistormorde (Gast)


Lesenswert?

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.

von Chris B. (dekatz)


Lesenswert?

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 ;-)

von Chris B. (dekatz)


Lesenswert?

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
Noch kein Account? Hier anmelden.