Nächstes Thema anzeigen
Vorheriges Thema anzeigen

Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen
Du musst dich anmelden um Beiträge zu schreiben!Du musst dich anmelden um Beiträge zu schreiben!
Autor Nachricht
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Fr 31 Dez, 2004 02:45  Titel:  lowcost io-karte mit atmel atmega kontroller
Nach untenNach oben

hi,

inspiriert durch shadowrun's thread

http://www.car-pc.info/phpBB2/viewtopic.php?t=3948&highlight=

hab ich mich mal mit den atmel mikrokontrollern vom typ ATMEGAxx beschäftigt.

datenblatt:
http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf


mit den kontrollern kann man wirklich sehr günstig io-karten aufbauen.

hier ein erster prototyp (danke frank!)

Image

diese schaltung hat
- nicht weniger als 32 ein-/ausgänge,
- davon 8 analoge eingänge
- treiber für 16 relais (500mA) (die beiden kleinen käfer)
- drehzahleingänge
- 16mhz prozessor mit internem oszillator
- 32k flash rom
- rs232 schnittstelle zur verbindung zum PC
- Bauteilkosten unter 10,- Euro!

updates können ohne ausbau des chips geflasht werden (links auf dem bild ist das programmiergerät zu sehen, ein ähnliches läßt sich für 5,- euro selbstbauen)
link: http://rumil.de/hardware/avrisp.html

der kontroller ist in assembler programmierbar, es gibt aber auch compiler für c und für basic als freeware.

ich denke, das ist eine interessante hardwareplattform für unsere anwendungen im auto und könnte die grundlage für ein cpi- gemeinschaftsprojekt werden, wenn sich noch andere dafür interessieren.

gruß und einen guten rutsch,

olaf



    
kevin_lebt
Manchmalposter
Manchmalposter


Alter: 41
Anmeldung: 26.12.2004
Beiträge: 97
Wohnort: Neumarkt


BeitragVerfasst: Sa 01 Jan, 2005 17:29  Titel:  (Kein Titel)
Nach untenNach oben

Hi erstmal ein gutes Neues Jahr 2. RESPECT!
Hab mir das USB Experiment Interface K8055 von Conrad besorgt.
Bin eigentlich ganz zufrieden nur eins stört mich es hat nur 2 Analoge Eingänge.
Bin an deinem Projekt interresiert!

Mfg Flo



    
Vik
Forumjunkie
Forumjunkie


Alter: 41
Anmeldung: 18.04.2004
Beiträge: 718
Wohnort: Ostfriesland

2005 Volkswagen Passat
BeitragVerfasst: Sa 01 Jan, 2005 19:23  Titel: Grossartig ! (Kein Titel)
Nach untenNach oben

Habe auch vor soetwas zu bauen. Finde diese Lösung auf jeden Fall besser als die teure CES Relaiskarte. Was hast du als Treiber für die Relais genommen? Sind das uln2803a?



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Sa 01 Jan, 2005 20:23  Titel:  (Kein Titel)
Nach untenNach oben

@kevin_lebt:
schönes neues jahr und willkommen im forum!
das k8055 hab ich auch, bin eigentlich sehr zufrieden mit dem teil, aber es könnte halt mehr eingänge haben.
Mit dem ATMEGA32 hat man imerhin 8 analoge eingänge und falls das nicht ausreicht, kann man noch einen multiplexer vorschalten und damit die anzahl nahezu beliebig vergrößern.

@vik:
ja genau, das sind die uln2803a. hab ich mir vom K8055 abgeguckt.
da werden sie sowohl als ausgangs- alsauch als eingangsstufen verwendet.
die kosten nur 40cent und haben 8 Treiber mit integrierten freilaufdioden für induktive lasten.
der ATMEGA32 , den ich verwende, kostet 6,20 euro, der ATMEGA16 mit 16k flash kostet 4,15 euro.
hast du deine AVRs mit assembler oder in c programmiert?



    
Vik
Forumjunkie
Forumjunkie


Alter: 41
Anmeldung: 18.04.2004
Beiträge: 718
Wohnort: Ostfriesland

2005 Volkswagen Passat
BeitragVerfasst: So 02 Jan, 2005 02:10  Titel:  (Kein Titel)
Nach untenNach oben

fuchs hat folgendes geschrieben:
...hast du deine AVRs mit assembler oder in c programmiert?

In Basic (bitte nich hauen Wink) konnte ich halt schon und war mir der einfachste weg wobei ich denke dass ich mir endlich mal c(++) aneignen müsste...^^
von den uln2803a hab ich auch noch einige zuhause zumfliegen. werde mal wenn ich wieder genug zeit hab meinen isp reparieren und mir ein paar ATmega bestellen...hatte vorher nur mit dem AT90S2313 "rumgespielt"...
ich denke mal dass ich mein "gerät" noch mit einem usb-2-rs232 ic ausstatten werde da meine serielle schnittstelle beim carpc schon für obd vorgesehen ist ^^



    
Mic
Forumkenner
Forumkenner


Alter: 53
Anmeldung: 06.10.2004
Beiträge: 127
Wohnort: Bochum


BeitragVerfasst: So 02 Jan, 2005 13:22  Titel:  (Kein Titel)
Nach untenNach oben

So, frohes Neues erst einmal. Explosive smile Ich hoffe ihr seid alle gut reingekommen.

Hallo Fuchs und vik,

endlich mal Leute die Ahnung haben. notworthy
Bin begeistert von eurer Idee.

Ich hatte mir an anderer Stelle schon einmal Gedanken um der wünschenswerten Funktionen einer Ein-Ausgangs Relaiskarte gemacht. scratch
Man könnte ja einige wichtige Funktionen integrieren.
Der absolute Hit wäre es, wenn man das Ganze über C.E.S. bedienen könnte. Furious hat ja angekündigt sich darum zu kümmern. Dancing Banana

Relaiskarte Wunschfunktionen:

PC Startfunktion:
- Relaiskontakt Schließer für 0,5-5 Sec - PC Ein (Zeit über Poti einstellbar)(Wird parallel zum Eintaster PC angeschlossen)
- Relaiskontakt Schließer für 0,5-5 Sec - TFT Ein (Zeit über Poti einstellbar) (Wird parallel zum Eintaster TFT angeschlossen)

PC Shutdownfunktion:
- PC sollte geregelt herunterfahren (Shutdown, Hibernate oder wie auch immer) (Zeit über Poti einstellbar 0Sec-15Min)
(realisiert über Einschaltimpuls PC(=Ausschaltimpuls)

Bei
- Kontakt Eingang Zündung +
Funktion: Sollte bei Kontakt ZV auf PC Startfunktion ausführen.
- Kontakt Eingang Zentralverriegelungsimpuls AUF (sowohl + gesteuert als auch – gesteuert)
Funktion: Sollte bei Kontakt ZV auf PC Startfunktion ausführen.

- Kontakt Eingang Zentralverriegelungsimpuls ZU(sowohl + gesteuert als auch – gesteuert)
Funktion: Sollte bei Kontakt ZV zu PC Shutdownfunktion.

- Kontakt Eingang Zusatzkontakt Alarmanlage (per Funk) (sowohl + als auch –) Sollte bei Betätigen der Fernbedienung PC Startfunktion ausführen,
so kann man per Alarmanlagenzusatzkontakt den PC auch ohne Zündung starten (W-Lan Datenabgleich).
Wenn man erneut die Taste der KFZ Alarmanlage drückt (wenn keine Spannung am Eingang der Relaiskarte anliegt => Shutdownfunktion

- Kontakt Eingang Licht +
Funktion: Gain-steuerung (TFT hell-dunkel)

- Temperatursensoren, Drehzahl, Tachosignal usw. usw.

Mit den oben beschriebenen Funktionen wird für einige Leute (die das ITPS nur zur Start oder Shutdownfunktion nutzen) ein ITPS überflüssig.
Das mit dem usb-2-rs232 ic finde ich auch eine geniale Idee, hat den Vorteil, das die Ser. Schnittstelle frei bleibt und man kann die Karte überall verbauen ohne doppelt Kabel ziehen muss. (USB-Hub)

Versteht meine Anregungen nicht falsch, ich will ja niemanden unter Druck setzen. Ist nur eine Traumkonfiguration von mir. #X-mas

Gruß aus Bo

Mic



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: So 02 Jan, 2005 18:29  Titel:  (Kein Titel)
Nach untenNach oben

@vik: ich hab zwei freie com-ports, deswegen brauche ich nicht unbedingt usb.
aber ansonsten gäbe es ja den FT232BM (6,xx euro) , mit dem man gleich onboard eine usb wandlung machen könnte.

@ mic: kein problem, ist morgen fertig Wink



    
Mic
Forumkenner
Forumkenner


Alter: 53
Anmeldung: 06.10.2004
Beiträge: 127
Wohnort: Bochum


BeitragVerfasst: So 02 Jan, 2005 19:44  Titel:  (Kein Titel)
Nach untenNach oben

@fuchs: Bin ja jetzt absolut begeistert.

Dann wird ja übermorgen das Layout fertig sein und ich kann die Platinen bei uns in der Fa ätzen lassen.
Am Donnerstag könnte die Serie bestückt werden und wenn die Post mitspielt haben wir zum Wochenende alle unsere Relaiskarten. Hut ab.
Spaß bei Seite, bei der Entwicklung eines solchen Projektes sollte man ja im Vorfeld die Anforderungen klären, um nicht später zu merken, das etwas unterdimensioniert ist.

Was hältst du von der Idee Alarmanlagen bzw ZV-Kontakte in die Karte miteinzubeziehen ?

Schaltung Realisierbar ???

Gruß

Mic



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Mo 03 Jan, 2005 00:51  Titel:  (Kein Titel)
Nach untenNach oben

@vik:
warum nicht in basic programmieren, wenn man damit am schnellsten zum ergebnis kommt.
damit bist Du mir auf jeden fall einen schritt voraus, da ich mich zum ersten mal an die programmierung eines avr's herantraue.

für mich ist C aus folgenden gründen der favorit für hardwarenahe programmierung:
- es ist schneller als basic (hab gelesen, dass die avr's sogar für c-programmierung optimiert sind)
- es ist übersichtlicher als assembler

assembler ist für kleinere projekte sicher die bessere wahl, weil es weniger speicher braucht und schneller ist.
da man beim ATMEGA32 ja recht viel speicher hat und die funktionen evtl. ziemlich komplex werden, würde ich C vorziehen.
falls man mit mehreren leuten an einem projekt arbeitet, ist der quellcode in C auch leichter zu verstehen als in assembler.

hier noch ein link zur usb-umsetzung:
http://home.t-online.de/home/holger.klabunde/usb/usb.htm#FT232Board

auf der gleichen seite gibts auch noch weitere doku und beispiele zum avr:
http://home.t-online.de/home/holger.klabunde/avr/avrboard.htm

hier noch eine einführung in die programmierung eines avr's in c:
http://www.mikrocontroller.net/wiki/AVR-GCC-Tutorial

@mic:
im prinzip müßten alle funktionen, die du angesprochen hast, realisierbar sein.
die software im avr läuft ja unabhängig vom car-pc. deshalb könnte man den pc damit auch zeitgesteuert ein und ausschalten. das ist alles nur eine frage der programmierung bzw. ob man dafür genug ein- und ausgänge frei hat.

alles ist möglich, allerdings muß man in das projekt noch viel arbeit reinstecken, bevor man was funktionfähiges in händen hält.
das ist eher was für leute, die gerne selber entwickeln und spass daran haben,mit elektronik bzw. software rumzuprobieren.
wer "plug and play" sucht, ist mit der rs-karte von furious oder der K8055 von elv/conrad auf jeden fall besser bedient.



    
Vik
Forumjunkie
Forumjunkie


Alter: 41
Anmeldung: 18.04.2004
Beiträge: 718
Wohnort: Ostfriesland

2005 Volkswagen Passat
BeitragVerfasst: Mo 03 Jan, 2005 01:18  Titel:  (Kein Titel)
Nach untenNach oben

C ist meiner Meinung auch die beste Lösung jedoch ist assembler meist schneller und deshalb interessant für zeitrelevante anwendungen.

Zum thema beschränkte ein und ausgänge muss ich sagen dass man über den I²C bus das ganze gut erweitern kann. ausserdem gibt es dafür einen praktischen temperatursensor (ich glaub das war der LM75 von national semiconductor.)



    
Shadowrun
Foruminventar
Foruminventar



Anmeldung: 21.04.2004
Beiträge: 1129



BeitragVerfasst: Mo 03 Jan, 2005 14:30  Titel:  (Kein Titel)
Nach untenNach oben

Also ich habe jetzt übers Wochenende mir assembler angeeignet.
(Basic und C haben keine richtigen umgebungen oder sind beschrängt in der Programmiergröße,
Im AVR Studio kann ich "sehen" wie was abgearbeitet wird.)

Mein Testboard hat 8 LEDs dran ein 4x20 Zeilen LCD und 5 Taster.

Habe jetzt mal 5 Lauflchter Prgrammiert dau wird passend im LCD angezeigt welches gerade läuft. (Sind insgesamt 520 Byte)

Das schwierige ist aber immer: Es gibt keine Pseudoparallelverarbeitung.
Die LEDs werden ja nacheinander geschaltet. dazwischen lasse ich den Kontroller nen paar tausend mal nichtstun aber während dieses nichtstun muß er ja doch noch die Eingänge überwachen etc.

Hier mal mein Code:
Code:

.include "m16def.inc"       ;bzw. 2333def.inc


.def temp1 = r21
.def temp2 = r22
.def temp3 = r23

;#############################################################################
;############ Stack initialisieren um Unterprogramme aufzurufen ##############
;#############################################################################

         ldi r16, LOW(RAMEND)             ; LOW-Byte der obersten RAM-Adresse
         out SPL, r16
         ldi r16, HIGH(RAMEND)            ; HIGH-Byte der obersten RAM-Adresse
         out SPH, r16
;#############################################################################

         
         
;#############################################################################
;###########         Startwerte setzen      ##############
;#############################################################################
         ldi r16, 0xFF
         out DDRB, r16       ;Port B durch Ausgabe von 0xFF ins
                             ;Richtungsregister DDRB als Ausgang konfigurieren
         ldi r16, 0xFF
         out DDRC, r16       ;Port C durch Ausgabe von 0xFF ins
                             ;Richtungsregister DDRB als Ausgang konfigurieren
         ldi r16, 0x00
         out DDRD, r16       ;Port D durch Ausgabe von 0x00 ins
                             ;Richtungsregister DDRD als Eingang konfigurieren

         ldi r16, 0xFF
         out PORTB, r16      ;PORTB auf 0xFF setzen -> alle LEDs aus
         
         rcall lcd_init      ;Display initialisieren
         rcall lcd_clear     ;Display löschen
   
    rcall setze1        ; Taste 1 wurde gerückt zum Start des Prgoramms
;#############################################################################   
   
   
;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
main:

   sbrs r20,1            ; Ist im Arbeitsregister 20 das 2 Bit null so wurde Taste 1 gedrückt und lauflicht 1 wird ausgeführt
   rcall lauflicht1

   sbrs r20,2
   rcall lauflicht2

   sbrs r20,3
   rcall lauflicht3

   sbrs r20,4
   rcall lauflicht4
   
   sbrs r20,5
        rcall lauflicht5

rjmp main
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################   
lese:
   sbis PIND,2      ; Ist im Inputregister das 2 Bit null so wird Taste 1 gedrückt und setzte 1 wird ausgeführt
   rcall setze1
   
   sbis PIND,3
   rcall setze2 
   
   sbis PIND,4
   rcall setze3
   
   sbis PIND,5
   rcall setze4
   
   sbis PIND,6
   rcall setze5 
ret
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
setze1:
   ldi r20, 0b11111101 ;Arbeitsregister 20 wird auf 11111101 gesetzt
   rcall schreibe      ; schreibe wird ausgeführt
   
        ldi temp1, '1'      ;Zeichen '1' ans Dislpay senden
        rcall lcd_data      ;        "
ret
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
setze2:
   ldi r20, 0b11111011
   rcall schreibe
        ldi temp1, '2'     ;Zeichen anzeigen
        rcall lcd_data
ret
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
setze3:
   ldi r20, 0b11110111
   rcall schreibe
        ldi temp1, '3'     ;Zeichen anzeigen
        rcall lcd_data
ret
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
setze4:
   ldi r20, 0b11101111
   rcall schreibe
        ldi temp1, '4'     ;Zeichen anzeigen
        rcall lcd_data
ret
;#############################################################################


;#############################################################################
;###########         Hauptprogramm         ##############
;#############################################################################
setze5:
   ldi r20, 0b11011111
   rcall schreibe
        ldi temp1, '5'     ;Zeichen anzeigen
        rcall lcd_data
ret
;#############################################################################



;#############################################################################
;###########   Proceduer Schreibe               ##############
;#############################################################################
schreibe:
           rcall lcd_clear    ;Display löschen      
           
           ldi temp1, 'L'     ;Schreibt 'Lauftlicht Nr ' ins Display
           rcall lcd_data

           ldi temp1, 'a'     
           rcall lcd_data
           
           ldi temp1, 'u'     
           rcall lcd_data

           ldi temp1, 'f'     
           rcall lcd_data

           ldi temp1, 'l'     
           rcall lcd_data

           ldi temp1, 'i'     
           rcall lcd_data

           ldi temp1, 'c'     
           rcall lcd_data

           ldi temp1, 'h'     
           rcall lcd_data   

           ldi temp1, 't'     
           rcall lcd_data 

           ldi temp1, ' '     
           rcall lcd_data                         

           ldi temp1, 'N'     
           rcall lcd_data
           
           ldi temp1, 'r'     
           rcall lcd_data           

           ldi temp1, ' '     
           rcall lcd_data           
ret
;#############################################################################



;#############################################################################
;###########         Procedure Warte         ##############
;#############################################################################
warte:
; delaying 199998 cycles:      ;Es werden 199998 Dürchgänge nix getan
          ldi  R17, $06
WGLOOP0:  ldi  R18, $37
WGLOOP1:  ldi  R19, $C9
WGLOOP2:  dec  R19
     rcall lese           ; Aber dazwischen wird bei jedem Schritt noch mal der Inputport gelesen
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
; -----------------------------
ret


;#############################################################################
;###########  Die verscheidenen Lauflichter und LCD Proceduren  ##############
;#############################################################################

lauflicht1:
           
   ldi r16,0b00111111
   out PORTB, r16

   rcall warte
      
   ldi r16,0b11001111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11110011
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11111100
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11111111
   out PORTB, r16

   rcall warte

ret

lauflicht2:
   ldi r16,0b11111110
   out PORTB, r16

   rcall warte
      
   ldi r16,0b11111011
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11101111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b10111111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b01111111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11011111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11110111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11111101
   out PORTB, r16

   rcall warte

ret

lauflicht3:
   ldi r16,0b11111100
   out PORTB, r16

   rcall warte
      
   ldi r16,0b11110000
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11000000
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00000000
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00000011
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00001111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00111111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11111111
   out PORTB, r16

   rcall warte

ret

lauflicht4:
   ldi r16,0b11111010
   out PORTB, r16

   rcall warte
      
   ldi r16,0b11101011
   out PORTB, r16

   rcall warte
   
   ldi r16,0b10101111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00111111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b01011111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11010111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11110101
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11111100
   out PORTB, r16

   rcall warte

ret

lauflicht5:
   ldi r16,0b11111111
   out PORTB, r16

   rcall warte
      
   ldi r16,0b00111111
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00111100
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00001100
   out PORTB, r16

   rcall warte
   
   ldi r16,0b00000000
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11000000
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11000011
   out PORTB, r16

   rcall warte
   
   ldi r16,0b11110011
   out PORTB, r16

   rcall warte
   

ret


 ;sendet ein Datenbyte an das LCD
lcd_data:
           mov temp2, temp1             ;"Sicherungskopie" für
                                        ;die Übertragung des 2.Nibbles
           swap temp1                   ;Vertauschen
           andi temp1, 0b00001111       ;oberes Nibble auf Null setzen
           sbr temp1, 1<<4              ;entspricht 0b00010000
           out PORTC, temp1             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
                                        ;2. Nibble, kein swap da es schon
                                        ;an der richtigen stelle ist
           andi temp2, 0b00001111       ;obere Hälfte auf Null setzen
           sbr temp2, 1<<4              ;entspricht 0b00010000
           out PORTC, temp2             ;ausgeben
           rcall lcd_enable             ;Enable-Routine aufrufen
           rcall delay50us              ;Delay-Routine aufrufen
           ret                          ;zurück zum Hauptprogramm

 ;sendet einen Befehl an das LCD
lcd_command:                            ;wie lcd_data, nur ohne RS zu setzen
           mov temp2, temp1
           swap temp1
           andi temp1, 0b00001111
           out PORTC, temp1
           rcall lcd_enable
           andi temp2, 0b00001111
           out PORTC, temp2
           rcall lcd_enable
           rcall delay50us
           ret

 ;erzeugt den Enable-Puls
lcd_enable:
           sbi PORTC, 5                 ;Enable high
           nop                          ;3 Taktzyklen warten
           nop
           nop
           cbi PORTC, 5                 ;Enable wieder low
           ret                          ;Und wieder zurück                     

 ;Pause nach jeder Übertragung
delay50us:                              ;50us Pause
          ldi  temp1, $02
EGLOOP0:  ldi  temp2, $84
EGLOOP1:  dec  temp2
          brne EGLOOP1
          dec  temp1
          brne EGLOOP0                      ;wieder zurück

 ;Längere Pause für manche Befehle
delay5ms:                               ;5ms Pause
          ldi  temp1, $86
PGLOOP0:  ldi  temp2, $C6
PGLOOP1:  dec  temp2
          brne PGLOOP1
          dec  temp1
          brne PGLOOP0
           ret                          ;wieder zurück

 ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
           ldi   temp3,50
powerupwait:
           rcall   delay5ms
           dec   temp3
           brne   powerupwait
           ldi temp1, 0b00000011        ;muss 3mal hintereinander gesendet
           out PORTC, temp1             ;werden zur Initialisierung
           rcall lcd_enable             ;1
           rcall delay5ms
           rcall lcd_enable             ;2
           rcall delay5ms
           rcall lcd_enable             ;und 3!
           rcall delay5ms
           ldi temp1, 0b00000010        ;4bit-Modus einstellen
           out PORTC, temp1
           rcall lcd_enable
           rcall delay5ms
           ldi temp1, 0b00101000        ;noch was einstellen...
           rcall lcd_command
           ldi temp1, 0b00001100        ;...nochwas...
           rcall lcd_command
           ldi temp1, 0b00000100        ;endlich fertig
           rcall lcd_command
           ret

 ;Sendet den Befehl zur Löschung des Displays
lcd_clear:
           ldi temp1, 0b00000001   ;Display löschen
           rcall lcd_command
           rcall delay5ms
           ret


Denke aber nen ITPS und ne Relaiskarte wird nicht so schwierig.
Heute werde ich noch mal versuchen das UART anzubauen. Dann noch ein vernünftiges Protokoll schreiben um mit dem Chip zu kommunizieren und Werte zu ändern (wenn schon dann ein Programmierbares ITPS so dass jeder seine Wunschzeiten eintagen kann ohne neu zu flashen)



    
compucat
Inputsammler
Inputsammler



Anmeldung: 23.08.2004
Beiträge: 33



BeitragVerfasst: Di 04 Jan, 2005 17:23  Titel:  (Kein Titel)
Nach untenNach oben

@shadowrun

nicht schlecht, Herr Specht, so was nach einem Tag Assembler-Training.

Dann werden wir hier hoffentlich bald die PWM / ADC Ladesteuerung für die Back-Up-Batterie und die damit verbundene Steuerung von MOSFET's anstelle der Klapper-Relais sehen.

Übrigens, der Butterfly-AVR als Eingabe-Steuergerät am Armaturenbrett wäre auch was feines.

Gruß compucat



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Di 04 Jan, 2005 20:49  Titel:  (Kein Titel)
Nach untenNach oben

@shadowrun:
das sieht ja schon gut aus. danke, dass Du deinen quellcode veröffentlich hast.
über die "pseudo-parallel-verarbeitung" hab ich mir auch schon gedanken gemacht.
eine idee wäre, eine zeitscheibe zu verwenden.
d.h. es läuft eine art task-scheduler ab, der nacheinander verschiedene programmteile aufruft.
das einfachste wäre, einen zähler zu nehmen und mit einer UND-maske die bits auszucodieren, z.b. so:

Code:

counter=0;
      /*Funktionsaufrufe VOR den Zeitscheibenfunktionen*/

      startfunktion();

while (1) /* schleife unendlich wiederholen */

      counter++; /* Es wird die naechste Zeitscheibe "adressiert" */
      if (counter & 0x01)
         /*Funktionen alle 5 ms*/
         funktion_5ms_1();  /*Zeitkritische funktion 1*"
         funktion_5ms_2();  /*Zeitkritische funktion 2*"
         usw...
          else
         if (counter & 0x02)
          /*Funktionen alle 10 ms*/
         funktion_10ms_1(); 
         funktion_10ms_2(); 
         usw....
         else
            if (counter & 0x04)
               /*Funktionen alle 20 ms*/
         funktion_20ms_1();  /*Zeitunkritische Funktion 1*/
         funktion_20ms_2();  /*Zeitunkritische Funktion 2*/
            else
               if ((counter & 0x08) != 0)
                  /*Zähler zurücksetzen*/
                  counter = 0;





    
compucat
Inputsammler
Inputsammler



Anmeldung: 23.08.2004
Beiträge: 33



BeitragVerfasst: Mi 05 Jan, 2005 00:46  Titel:  (Kein Titel)
Nach untenNach oben

@fuchs

Zumindest beim ATm16 liefern alle Blöcke, die für Car-PC Anwendungen zeitkritisch sein könnten (ADC und PWM für Spannungsregelung, Zeitgeber) jeweils Interrupts. Die müsste man doch ausnutzen können, um zeitkritischen Anwendungen Vorrang zu geben.

Bei zeitunkritischen Anwendungen (Warten auf Eingaben, Bedingungen) könnte man beim Aufruf einen der Timer starten, der dann bei Zeitablauf (nach relativ kurzer Zeit) über Interrupt einen Rücksprung erzwingt.

Wenn das nicht hinzukriegen ist, dürfte ein round robin task scheduler, wie von Dir vorgeschlagen, zumindest ein gangbarer Weg sein, vor allem, wenn zeikritische Anwendungen melden, ob sie überhaupt Rechenbedarf haben..

Gruß
compucat



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Mi 05 Jan, 2005 23:57  Titel:  (Kein Titel)
Nach untenNach oben

Zitat von shadowrum:

"(Basic und C haben keine richtigen umgebungen oder sind beschrängt in der Programmiergröße,
Im AVR Studio kann ich "sehen" wie was abgearbeitet wird.)"


na, das stimmt aber nicht so ganz, ich hab mir jetzt eine schöne (und vor allem kostenlose) entwicklungsumgebung für die programmierung in C eingerichtet:

Als compiler verwende ich "WinAvr":
die all-in-one-lösung enthält auch eine programmieroberfläche mit projektverwaltung und die möglichkeit, das fertige programm in den avr zu flashen.

Zum Simulieren nutze ich das AVRStudio von Atmel. Das kann nämlich nicht nur Assembler- sondern auch C-programme simulieren/debuggen.

Image

wie man das alles schritt für schritt einrichtet, kann man hier nachlesen:

http://www.kreatives-chaos.com/index.php?seite=avrgcc

also, ich finde C ist echt ideal für so eine anwendung.
...und falls man doch mal eine ganz zeitkritische funktion hat, kann man sie ja in assembler schreiben und in den C-Quelltext einfügen.

(bitte nicht falsch verstehen, das ist nur meine meinung, will hier keinem was vorschreiben Wink )



    
Shadowrun
Foruminventar
Foruminventar



Anmeldung: 21.04.2004
Beiträge: 1129



BeitragVerfasst: Do 06 Jan, 2005 11:30  Titel:  (Kein Titel)
Nach untenNach oben

Ja ist mir schon klar.

Insgesamt habe ich mir jetzt zum Ziel gemacht:

Relaiskarte mit 16 Variablen ein und ausgängen. Hardwaremäßig wurde ich das so wie bei meinem Testboard machen: Die Pins einfach per Steckbrücke rausführen und dann wird je nach Wunsch das Relaisboard Huckepack draufgesteckt. So kann man auch noch ein LCDAnschluß Huckepack draufstecken.

Dann soll das ganze noch PC an/ aus funktion haben halt ca wie das ITPS nur konfigurierbar

Für die Software habe ich mir auch schon gedanken gemacht:

Der PC ist iimmer die initialisiernde Kraft. So kann der Kontroller immer in einer Dauerschleife schauen ob sich an den Pins was verändert hat.
Wenn was sih verändert hat schickt er denneuen Status blind an den PC.
Wenn nu der PC was schickt da gibts ja
ReceiveByte und dafür ist ja ein Interrupt und da kann dann ja rein:

Hat er vom PC ein "S" (für Status) bekommen:
Dann schickt er den Status aller Anschlüsse zum PC

Bekommt er ein C (für Command):
Dann bekommt er nachfolgend die neu zu steztenden Relais bzw LCD Befehle

Bekommt er ein "I" ( für ITPS) :
sendet er wies im Moment mit der ITPS Funktion aussieht.

Bekommt er ein "J" ( kommt halt im Alphabet nach I):
Nimmt er zB neue Zeiten für die ITPS Funktion und neue Ports entgegen (Wenn jemand etwas anders verkabelt hat)



    
fuchs
Developer
Developer


Alter: 53
Anmeldung: 04.04.2004
Beiträge: 1319
Wohnort: Friesland


BeitragVerfasst: Do 06 Jan, 2005 13:13  Titel:  (Kein Titel)
Nach untenNach oben

so in der art stell ich mir das auch vor.

zu den eingängen:

was hältst du bzw. Ihr davon , einen 16 zu 1 multiplexer für die analogen eingänge einzusetzen?

damit könnte man die anzahl der analogen eingänge auf 16 erhöhen, so daß die konfiguration dann so aussehen könnte:

16 Analoge Eingänge (auch als Digitale Eingänge nutzbar)
11 Digitale Eingänge (davon 3 Drehzahleingänge)
16 Ausgänge (Digital oder PWM)

edit: nur 9 Digitale Eingänge, weil 2 für die RS232-Schnittstelle drauf gehen





Zuletzt bearbeitet von fuchs am Do 06 Jan, 2005 18:15, insgesamt einmal bearbeitet
    
Shadowrun
Foruminventar
Foruminventar



Anmeldung: 21.04.2004
Beiträge: 1129



BeitragVerfasst: Do 06 Jan, 2005 14:52  Titel:  (Kein Titel)
Nach untenNach oben

klingt gut aber ich glaube da schießt man übers Ziel hinaus.

Ich denke mal die vorhanden anschlüsse reichen vollkommen aus.
Habe meine Karte jetzt auf
8 digitale ausgänge
8 digitale Eingänge.
anschluß per COM
Ansteuerung eines LCDs
und 8 analoge eingänge umgebaut.

2 analoge eingänge werden von meiner Lenkradfernbedienung eingenommen
2 digitale für den anschluß an den ps2 Port (für die Lenkradfernbedinung)
2 digitale Für Zündung und Licht.

Frei ist da also noch ne Menge.

Ich würde ja gerne mal mein Testboard nen Bild posten aber leider ist mein Handy alle und ich finde das Ladegerät nicht grrrrrrrrrr.

Habe da aber immer die 8 Pins (PA0-PA8, PD......) zur Seite gelegt und dann noch Ground und +5V. Da setze ich dann meine LED Platine oder die Tasterplatine oder die Platine mit dem LCD drauf.
So kann man da ja auch nen Multiplexer draufknallen nen Relaistreiber und nach und nach erweitern.

Da werden wir schneller Ergebnisse produzieren als wir uns ne MegaVersion bauen die dann zu lange braucht bis sie fertig ist.

Ich werde jetzt übers Wochenende versuchen obiges vorgeschlagenes Programm in Assembler zu schreiben. Dazu dann noch ne ITPS Funktion und eine Funktion meine Lenkradfernbedieung anzuschließen und zwar über den PS2 Tastatur Anschluß.

Wenn das läuft kann man ja seine Port wenn man denn mehr braucht erweitern



    
Mic
Forumkenner
Forumkenner


Alter: 53
Anmeldung: 06.10.2004
Beiträge: 127
Wohnort: Bochum


BeitragVerfasst: Fr 07 Jan, 2005 19:28  Titel:  (Kein Titel)
Nach untenNach oben

Euer Tempo ist bemerkenswert. Weiter so.

Gruß

Mic



    
G-Punkt
Moderator a.D.
Moderator a.D.


Alter: 37
Anmeldung: 24.05.2004
Beiträge: 154
Wohnort: Hamburg

1995 BMW 3 Series
BeitragVerfasst: Do 13 Jan, 2005 01:03  Titel:  (Kein Titel)
Nach untenNach oben

Also ich finds sehr spannend wie ihr hier am arbeiten seid !
Man merkt das dieses Forum wirklich dazu genutzt wird zusammen Lösungen für wirklich interessante Probleme zu finden.

Mich würde persöhnlich interessieren, ob es mit einer solchen Relaiskarte auch möglich wäre eine art "analoger" Ausgänge zur Verfügung zu stellen. Ich stelle mir das nach dem prinzip vor eine Ausgangsspannung an einem Ausgang von 0-12 V Regelbar zur verfügung zu stellen (so eine art Software gesteuertes Poti).

Wäre für mich persöhnlich sehr interessant da sich dadurch z.B. eine Selbstgebaute Sitzheizung oder ähnliches komfortabel vom Car-PC steuern lassen würden. Vieleicht hab ich damit ja auch andere inspiriert jetzt *g*.


mfg G-Punkt



    
Beiträge der letzten Zeit anzeigen:      
Du musst dich anmelden um Beiträge zu schreiben!Du musst dich anmelden um Beiträge zu schreiben!
Vorheriges Thema anzeigenDieses Thema verschickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Datei sichernPrintable versionEinloggen, um private Nachrichten zu lesenNächstes Thema anzeigen

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen
 

CarTFT
Forenspecials



Forensicherheit - Alle Zeiten sind GMT + 1 Stunde -
Powered by phpBB2 Plus, phpBB Styles, based on phpBB © 2001/6 phpBB Group :: FI Theme ::

[ Zeit: 0.8998s ][ Queries: 48 (0.2166s) ][ GZIP Ein - Debug Ein ]
carTFT.com