PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Absolut neu in dem Gebiet! Schaltung die mir HEX Codes ausg.



Jürgen75
19.06.2007, 13:36
Hallo,

Sorry, bin absolut neu in dem Gebiet. Aber jeder muß mal Anfangen 8-[
Hab zwar schon mehrere Transitorschaltung aufgelötet usw. aber was ich da genau gemacht habe wußte ich nicht immer 100%ig O:)

Da ich garnicht weiß wo ich angfangen soll/muß sag ich gleich was mal zum schluß rauskommen sollte.
Bin gelernter KFZ Elektriker aber das war leider noch genau am Anfang von dem KFZ BUS Zeitalter. Möchte irgendwie nen Atmel AVR so programmieren das der mir dann nen HEX Code im KFZ-BUS Format (Die Baudrate 9k6 ,8 Datenbits und ein Stopbit) sendet.

Wenn ich dann mal soweit bin sollte evtl. nach Eingang eines bestimmten HEX mit einem anderem HEX geantwortet werden. Aber das hat noch zeit.

Was brauche ich ? Gibt ja verschiedene Bausätze bzw Testboard´s, aber welcher wäre da was für mich ?

Wo kann ich mich in das Thema einlesen ? In welcher Richtung muß ich suchen ?

Vielen Dank im voraus !

M.f.G.
Jürgen

jar
19.06.2007, 14:00
den Bus gibt es nicht, es gibt soweit ich bis jetzt weiss verschiedene und verschiedene Protokolle, suche mal nach OBD on board diagnose, auch hier, da gibt es jede Menge Links Tipps Bauprojekte, Prozessor fast egal, ich hab mit einem Atmel angefangen in Bascom und bin nun (wieder) bei C ist halt kostenlos als AVR GCC angefangen wann vor einem Monat oder 2 und nun ist mein Proggi schon fast 32 k groß und läuft prima, ist aber noch nicht fertig

wo stehe ich nach einem ca. Monat

LCD Ausgabe
Tasten abfragen auswerten
I²C speaken
Interruptverarbeitung
PWM
DA Wandlung
ADC lesen und werten
Ports setzen und löschen
DCF77 dekodieren

nun geht es an die hohe Kunst der Optimierung und der power OFF Sleep Modi

Jürgen75
19.06.2007, 20:12
aha :-k
links und Bauprojekte hab ich schon genügend gefunden, nur weiß ich nicht welchen "Satz" ich mir zum erlernen kaufen sollte.

Bei rowalt.de hab ich mich gerade etwas eingelesen. BASCOM könnte für mich relativ einfach zu erlernen sein weil ich das gute alte BASIC noch im Hinterkopf habe O:)

Vielleicht denk ich aber auch viel zu kompliziert und sollte einfach mal drauf los legen...

Noch ne Grundfrage:
Einen vorhandenen HEX Code so wie er ist auszugeben dürft dann keine Problem sein oder ? Hab da irgend einen Logikfehler von dem ewig vielen lesen #-o

Wäre da was zu empfehlen ?:
http://www.myavr.de/shop/artListe.php?katID=1

wkrug
20.06.2007, 11:21
Zuerst mal musst Du dir schon mal im klaren sein auf welchem Bus Du im Auto mitlesen willst.
Ich kenn da bereits 4 verschiedene Bussysteme die alle anders arbeiten (Wird da sicher noch mehr geben).

Als nächstes kannst Du dich nach einem Projekt umschauen, das das Protokoll des von Dir gewünschten Bussystems kann.
Am Besten wäre da eine Open Source Quelle, weil man dabei auch selber was am Quellcode verändern kann.

Ein System, das alle in einem Auto verwendeten Bussysteme kann wird ein größeres Projekt, wenn es überhaupt möglich ist.
Zudem sind bestimmte Schnittstellenparameter vom Modell und vom Baujahr des Fahrzeuges abhängig.

Klär mal diese Fragen erst ab und Poste dann hier noch mal.

So wie deine Fragestellung jetzt lautet wird Dir niemand weiterhelfen können.

Deine Fragestellung ist zur Zeit vergleichbar mit "Mein Auto fährt nicht mehr, was ist da defekt ?".

Jürgen75
20.06.2007, 13:37
ok, soviel kann ich schon mal dazu schreiben:

Konvertierung des I-Bus (K-Bus ISO-9141) auf RS232 Standard
Der Bus arbeitet mit Pegeln, die relativ zur Batterie Spannung (ca. 12 V) des Fahrzeugs definiert sind und für eine logische 0 (Low) 0-30 % und für eine logische 1 (High) 70-100 % der Batteriespannung betragen.

Es handelt sich um eine einfache serielle UART-Kommunikation, die für Datenraten bis maximal 20 kBit/s eingesetzt werden kann.

Der I-Bus ist Low aktiv. Die Logische "1" wird übertragen wenn der Bus vom H-Pegel (Ruhezustand) für kurze Zeit auf L-Pegel gezogen wird. Die Übertragung wird über die Busgeschwindigkeit und den Pegel gesteuert. Low entspricht 1 und High entspricht 0, bei definierter Dauer eines Bits.



Hilft das weiter ?

Ein OBD-Modul habe ich bereits. Vom Lappi kann ich über Software bereits den HEX Code zum KFZ-BUS schicken (Baudrate 9k6 ,8 Datenbits und ein Stopbit) Irgendwann sollte es dann aber alles über einen AVR funtionieren :-k

wanderer
20.06.2007, 13:47
Dann brauchst du auf jedenfall nen Pegelwandler um mit dem Boardnetz kommunizieren zu können, weil der AVR nur 5V und weniger kann, das Boardnetz vom Auto aber um die 12V hat. Welcher da in Frage kommt weiss ich nicht genau..
Naja sonst sollte das ganze eigentlich relativ einfach zu machen sein, hol dir irgendein kleines AVR Board und experimentiere ein bisschen rum, weil komplett ohne Erfahrung wirst du da wohl nicht weit kommen.

Gruß,

wanderer

Jürgen75
25.06.2007, 12:12
Hi,

hab mir jetzt ein myAVR Bausatz 1 LPT mit nem Mikrocontroller ATmega8L 8PI + UART + MAX232 + Quarz usw zusammengebaut und getestet. Die LED´s blinken \:D/ (Testprogramm), also hab ich anscheinend keine Fehler gemacht.

Ich finde leider kein Vorlage wo ich diese Daten festlegen kann.:

Baudrate 9600, 8 Daten-Bits, 1 Stop-Bit und gerade Parität (even).

Bzw. irgendein Bespiel wie ein HEX (nur z.B. "ab cd ef gh if") in diesem Format angelegt werden muß.

Hat bitte jemand sowas für mich, oder kann mir jemand sowas schnell erstellen so das ich mal eine Grundlage zum basteln hab.

DANKE !

M.f.G.
Jürgen

wkrug
25.06.2007, 14:44
Mit welchem Programmiercompiler arbeitest Du denn ?
Bascom ? "C" ? oder möchtest Du den Controller in Assembler programmieren ?
Der Controller arbeitet binär, also 4Bit ist eine hex Zahl.
Da die AVR's mit 8Bit arbeiten, hast du pro Byte 2 hex Zahlen.

Zu den 2 nibbles (4 Bit) eines Bytes werden dann 0x30 bei den Zahlen von 0...9 und 0x37 für die A...F zu den hex Werten dazugezählt.

Beispiel (für Assembler):
0b10100011 = 0xA3 = 163

Damit dein PC so eine Hex Zahl über die serielle Schnittstelle in lesbarer Form übertragen bekommt, musst Du diese in ASCII umwandeln.

0xA = 0b1010 = 0b00001010
0b00001010 + 0b00110111 = 0b01000001 = 'A'

0x3 = 0b0011 = 0b00000011
0b00000011 + 0b00110000 = 0b00110011 = '3'

Wenn Du also 0b01000001 und 0b00110011 auf deiner seriellen Schnittstelle überträgtst wird dein PC A3 anzeigen.

Eine Hochsprache ("C" oder Bascom) hat Ausgabekommandos, die diese Wandlung automatisch vornehmen und direkt die ASCII Werte übertragen.

Jürgen75
25.06.2007, 22:42
wow, danke ! aber ich versteh nur BAHNHOF 8-[

Ist das nur bei Assembler so ?

Benutze Bascom weil ich von früher noch eher mit den Befehlen zurecht komme. uiuiui ich dachte ich könnte mir dar einfach was zusammenschnitzen...

Muß jetzt erst mal auf mein Nullmodemkabel warten, weil ich ja so überhaupt nicht weiß was wirklich rauskommt.

Wenn ich jetzt in diesem Format ein HEX Code habe:

3b 03 46 01 7f

wie könnte/müßte da der Befehl aussehen das da was brauchbares rauskommt ?

Vitis
26.06.2007, 09:48
was verstehst du unter brauchbar?

Jürgen75
26.06.2007, 11:06
was verstehst du unter brauchbar?

hmmm, ja das dieser Code so bei dem anderem Gerät ankommt :-k

Vitis
26.06.2007, 13:37
print "3b 03 46 01 7f";

aber ganz ehrlich, Dir fehlen einfach die Grundlagen.
Ich würde Dir für den Anfang Empfehlen mal mit ner kleinen
Geschichte anzufangen.
Erst Programm "LED-Blink", dann Kommunikation mit PC,
dann mal n LCD anschließen und so schrittweise aufbauen
bis Du dann irgendwann das Knoff Hoff hast um an nem
KFZ-Bus rumzuwerkeln, weil das kann ganzschön ins Auge
gehen wenn da was daneben geht.
CAN-Bus, der da gern verwendet wird ist nicht gerade trivial,
nur mal so als Anmerkung. Ist nix weltbewegendes, klar, aber
mitunter recht verzwickt.
Die andern Geschichten wie Zahlenformate, Strings etc. kommen
bei der Einarbeitung dann von alleine nach und nach.
Auch die Elektronische Seite bei der Verwendung von Controllerschaltungen
im KFZ hat n paar schöne Fallstricke eingebaut, deshalb Vorsicht
mit mal eben zusammengebrutzelten Schaltungen am Bordnetz.
Im einfachsten Fehlerfall raucht die mal einfach ab und das wars dann.
Im schlimmsten Fall kanns nen Kabelbrand geben und das ist dann
übel wenn der Kabelbaum raus muss (hatt ich mal und war ne
teure Angelegenheit).
Ich wills Dir nicht ausreden, aber Dir empfehlen langsam und mit Bedacht
Schritt für Schritt ran gehen.
FÜr den Anfang kann ich am Besten Empfehlen das Rowalt Buch zu
kaufen und mal die Programmbeispiele Schritt für Schritt abzuarbeiten.
Das ist zwar im Moment ne recht fruchtlose Geschichte, aber man lernt
ungemein dabei und so manches Rätsel löst sich da ganz von selbst.

Jürgen75
26.06.2007, 15:05
print "3b 03 46 01 7f";



das ist alles ? ohhh man ich hab da viel zu kompliziert gedacht.

Die LED Schaltung hab ich schon hinter mir. Natürlich möchte ich noch weitere Sachen probieren.

Ist das Buch wirklich zu empfehlen ? Ich hatte mir die "Werbung" schon mal angeschaut, aber meist ist eben in den Lernbüchern viel drinn was einem nicht intressiert. Ist ja auch nicht ganz billig, aber wenn das ein "MUSS" ist dann kauf ich mir das schon.

Danke !

M.f.G.
Jürgen

Vitis
26.06.2007, 18:45
Der Rowalt ist prima, also mir hats den Einstieg deutlich vereinfacht.
Es ist auch deshalb zu empfehlen, weil er nicht nur stur die Bascom
internen Befehle nutzt und beschreibt, sondern oftmals die Handhabung
von AVR-internen Registern nutzt, bzw. beschreibt wie der Befehl
von Bascom eben im Controller "tatsächlich" ausgeführt wird.
Sprich wie er eben compiliert wird vom Bascom und das hilft einem
echt weiter wenn man das Prinzip verstanden hat, weil man dann
auch Funktionen programmieren kann, die entweder Bascom eben
nicht eingebaut hat oder eben Bascom für den für die jeweilige
Anwendung benötigten µC eben nicht kann.
manche Klippe lässt sich so "zu Fuß" gut umschiffen. KLar, wenn man
dann etwas weiter ist ist das Buch dann Pipifax, aber für den Einstieg
find ichs super.
Auch das vom Kühnel hab ich mir angeschafft und ich gebe zu,
ich benutze beide noch hin und wieder als Nachschlagewerk wenn ich
mal wieder den Wald vor lauter Bäumen nicht seh und an irgend nem Problem
rumknoble.
Auch ein sehr hilfreiches Werk wie ich finde ist das: "Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie. Programmierung in Assembler und C - Schaltungen und Anwendungen."
Gut, ich hab da halt insgesamt für alle Werke €100,- im Schrank stehen,
manch einer wird sagen das ich spinne, aber für mich kann kein onlinetutorial ein gedrucktes Buch, wo ich Schnipsel reinlegen kann und hin und her blättern (manchmal noch vorm Einpennen in der Nacht) , ersetzen.

Jürgen75
10.07.2007, 23:19
Hi,

so, hab jetzt Tagelang gelesen, rumprobiert ach ja und nen Pegelwandler integriert.

War mir ja fast klar das ich noch Fehler mache und meine HEX Daten nicht richtig ankommen. Vielleicht kann mir ja bitte jemand weiterhelfen.

Nochmal zur Info. Diese Hex sollen so gesendet werden:
80 04 bf 11 01 2b
3b 04 f0 4f 11 11 80
3b 03 46 01 7f
Baudrate 9600, 8 Daten-Bits, 1 Stop-Bit und gerade Parität (even)



$regfile = "m8def.dat"
$crystal = 3686400 'Quarz: 3.6864 MHz
$baud = 9600 'Baudrate der UART: 9600 Baud
Config Com1 = Parity = Even , Stopbits = 1 , Databits = 8 ,


Config Pind.0 = Input 'RxD für RS232
Config Pind.1 = Output 'TxD für Rs232

Do

Print "80 04 bf 11 01 2b"
Waitms 5
Print "3b 04 f0 4f 11 11 80"
Waitms 5
Print "3b 03 46 01 7f"
Waitms 300
Loop


Bitte nicht lachen ! Sind bestimmt einige Fehler drinn.
Was ist da falsch bzw. fehlt ?

M.f.G.
Jürgen

Vitis
12.07.2007, 18:57
also,

im groszen Ganzen schauts aml nicht schlaecht aus, nur n paar Kleinigkeiten.
Die Pins auf denen die Hardware UART liegt brauchste nicht explizit
als Input und Output deklarieren, die das schon ueber die SFR geregelt
wird.
Die Konfiguration der UART auf 8n1 ist zwar nicht verkehrt, muss aber
ebenfalls nicht sein, da dies schon die Standardeinstellungen sind.
Der zweite Baud-Aufruf gehoert auch nicht rein, den brauchste nur,
wenn Du zur Programmlaufzeit die Baudrate aendern willst.
Der ... mist, die Aegyptische Tastatur hat kein String (Dollar) Zeichen ...
also der (Dollar)baud = 9600 ist OK.

Das waers dann mal so auf die Schnelle bei 30 Grad aus Aegypten ...
Gruesse an alle Daheimgebliebenen

Jürgen75
12.07.2007, 21:27
hmm, nur leider stimmt da was nicht.

Wenn ich diese HEX-Codes per PC und BUS-Simulator an den TFT schicke schaltet der sich auch ein aber wenn ich das über den AVR laufen lasse passiert nix.

HILFE [-o<

Vitis
15.07.2007, 19:28
Tja, dann stimmt was an der Uebertragung nicht.
Moegliche Fehler waehren da:

Baudrate, Quarz vom Mikrocontroller,
Pegelwandler, CR/LF, etc.....

lawman
16.07.2007, 10:59
"manch einer wird sagen das ich spinne, aber für mich kann kein onlinetutorial ein gedrucktes Buch, wo ich Schnipsel reinlegen kann und hin und her blättern (manchmal noch vorm Einpennen in der Nacht) , ersetzen."

Da kann ich Dir nur voll und ganz zustimmen.

Jürgen75
16.07.2007, 11:27
mal ne dumme Frage :-k

Führt der Simulator von BASCOM meinen Code "richtig" mit den angegebenen Einstellungen über den Com-Port aus oder kann man da nur den Programmablauf testen ?

M.f.G.
Jürgen

Bluesmash
16.07.2007, 12:44
mit dem print befehl werden doch nur asci zeichen gesendet?

probiers mal so (hex wert in die variable a schreiben und dann ausgeben):

a=&H3E
printbin a

gruss bluesmash

Jürgen75
16.07.2007, 22:58
tja, jetzt müßt ich nur wieder wissen wie ich auf das richtige Format komme.

mein Code: 80 04 bf 11 01 2b 3b 04 f0 4f 11 11 80 3b 03 46 01 7f

Bei bf ... 2b .... 3b kommt ne Fehlermeldung weil ich diese Variable nicht anlegen kann 8-[

Bluesmash
17.07.2007, 07:22
z.B so:

dim a as byte

a=&H80
printbin a

a=&H04
printbin a

a=&Hbf
printbin a

a=&H11
printbin a

usw....


gruss bluesmash

Jürgen75
17.07.2007, 20:39
schade, damit funktioniert es auch nicht [-o<

trotzdem danke !

M.f.G.
Jürgen

Jürgen75
18.07.2007, 10:36
ohhh man, hab jetzt alles mal mit zwei PC´s simuliert um zu sehen was bei meinen Befehlen rauskommt.

Mein AVR Borad ist anscheinen defekt. Egal wie ich was printe (bin, hex, ASCII usw) es kommt nur Mist raus. Meistens irgendwelche 5-stelligen HEX codes obwohl ich nur einen gesendet habe :-k

Welches Bauteil könnte da jetzt defekt sein ? Quarz, der 232ér Chip oder sogar der ATmega8 ?

M.f.G.
Jürgen

Bluesmash
18.07.2007, 17:09
ich denke du hast deinen mega nicht auf externen quarz eingestellt.
überprüf mal die fuses ob da auch auf externen quarz eingestellt ist oder ob der immernoch auf intern läuft.
anhand der quarzfrequenz welche du in deinem programm hast gehe ich davon aus das du einen externen quarz hast.

gruss bluesmash

Jürgen75
19.07.2007, 22:54
ich denke du hast deinen mega nicht auf externen quarz eingestellt.
überprüf mal die fuses ob da auch auf externen quarz eingestellt ist oder ob der immernoch auf intern läuft.
anhand der quarzfrequenz welche du in deinem programm hast gehe ich davon aus das du einen externen quarz hast.


toll, das war bestimmt der Fehler ! Aber leider hab ich unter BASCOM jetzt den Quarz unter fuses deaktiviert . Jetzt hab ich keinen zugriff mehr auf den Chip. Das man das nicht machen sollte steht ja in vielen Beiträgen, aber leider stand nix in dem wo ich die Anleitung für die Umstellungen gefunden hab.

So, jetzt kann ich mir erst mal nen neuen Chip besorgen....

Bevor ich den nächsten kaputt mache wäre es interessant ob ich den internen Quarz im Programmiercode deaktivieren kann und aber danach noch zugriff darauf habe. ?

Bluesmash
20.07.2007, 15:25
wahrscheinlich hast du jetzt auf externen takt umgeschaltet. wenn di irgendwo eine taktquelle hast, ich glaube so im kHz-Bereich genügt, kannst du den mega damit speisen und ihn wieder zum leben erwecken....

gruss bluesmash

WernerMeier
26.07.2007, 21:31
Hast Du einen externen Quarz dran?
Hier ist ein Einsteigertutorial, wie man den anschließt:
http://www.mikrocontroller.net/articles/AVR-Tutorial

Dann besorge Dir mal PonyProg. Damit kann man die Fuses bequem lesen und setzen.

Bis bald im BMW-Treff ;)

Tino

Jürgen75
30.07.2007, 12:26
Hallo,

tja hab jetzt nen neuen Atmega8 reingesteckt und schon läuft´s mit printbin &H80 usw... naja, vielleicht beim zusammenbau den anderen zerstörrt.

Egal, hat mich viel Nerven gekostet, aber jetzt weiß ich das Hardwaretechnisch alles i.O. ist.

Danke an alle Helfer !!!

Taste mich jetzt langsam an den INPUT (abfrage/vergleich) ran.
Wenn jemand nen guten Link dazu weiß bin ich sehr dankbar O:)

@Tino
du bist der Grund warum ich das alles angefangen hab. Hab damals keine Antwort auf dein Modulangebot bekommen. 8-[