Forum: Mikrocontroller und Digitale Elektronik FTDI VNC1L über SPI mit ATmega64?


von Müller H. (Firma: Blauweiss AG) (soprano)


Lesenswert?

Hallo

Hat jemand von euch Erfahrung mit einem VNC1L von FTDI?
Ich möchte das Ding über SPI mit eine ATmega64 steueren.

Das Problem ist, nach dem Studium der Datenblätter bin ich mir nicht 
sicher ob dies reibungslos möglich ist?

Ist es richtig, dass er ausser im Input Binär Modus immer das LSB zuerst 
verlangt?

Danke
Gruss Hans

von Hätt L. (Firma: Edelweiss AG) (knutsen)


Lesenswert?

Hallo Hans

Funktioniert den VNC1L mit dem ATMega64 bereits? Und hast du Erfolg mit 
deiner Firma Blauweiss AG?

Gruss Hätt

von Frank (Gast)


Lesenswert?

Viel schlimmer finde ich, daß der VNC1L 10 Bit pro read/write braucht. 
Und die meisten MC haben 8...so wie es bei SPI üblich ist.
Wie willst Du 10 Bits erzeugen?

von Roland B. (rolandb)


Lesenswert?

Müller Hans wrote:
> Hallo
>
> Hat jemand von euch Erfahrung mit einem VNC1L von FTDI?
> Ich möchte das Ding über SPI mit eine ATmega64 steueren.
>
> Das Problem ist, nach dem Studium der Datenblätter bin ich mir nicht
> sicher ob dies reibungslos möglich ist?
>
> Ist es richtig, dass er ausser im Input Binär Modus immer das LSB zuerst
> verlangt?
>
> Danke
> Gruss Hans

Ich bin auch gerade dabei. Wenn ich es richtig lese ist der MSB immer 
zuerst. Unabhängig vom Binär/ASCII Modus was die Kommunikation über dem 
SPI Modus betrifft.

Habe ein kleines Kommunikationsschnippsel erzeugt, ich denke das ist die 
Routine um erstmal zum synchronisieren zu kommen.Diese Routine wäre eine 
für den NICHT ShortCommandModus.
1
;Aufbau für MASTER(Atmega8) an SLAVE(VDIP1/VNC1L) senden
2
;2 Bytes senden über MOSI
3
;
4
;->1. Byte 00000|D2|D1|D0
5
;    D2=1! Startbit
6
;    D1=0! an Slave senden, R/~W
7
;    D0=0 ins Datenregister schreiben, D0=1 ins Statusregister schreiben
8
;->2.Byte 
9
;  Datenbyte aus SPDR senden
10
;Nun Status abwarten:
11
;      1. auf MISO testen, nur ein Bit zulassen indem CS bzw SS 0 gesetzt wird!!
12
;      ->Stausbit 
13
;        A=0 Daten akzeptiert
14
;        A=1 Daten nicht akzeptiert/Puffer voll    
15
;CS bzw SS auf 0 setzen  
16
17
SPI_SENDEN_STATUS:
18
;Statusregister ansprechen des VNC1L   
19
;1. Byte, vorbereiten des 2.Bytes.; hier soll 2.Byte ein Statuswort sein
20
;beide Bytes vorbereiten
21
  ldi temp,0x05   ;Slave ansprechen
22
  ldi temp1,FF  ;Echo senden
23
;1.Byte zum Slave
24
  out SPDR,temp  ;"Dienst" setzen des Slaves
25
SPI_SENDEN_STATUS_w1:
26
  sbis SPSR,SPIF  ;warten bis Übertragung zu Ende
27
  rjmp SPI_SENDEN_STATUS_w1
28
;2.Byte zum  Slave  
29
  out SPDR,temp1  ;"Echo senden" für Sync-Zweckes des VNC1L
30
SPI_SENDEN_STATUS_w2:
31
  sbis SPSR,SPIF  ;warten bis Übertragung zu Ende
32
  rjmp SPI_SENDEN_STATUS_w2 
33
ret
34
;WAS noch fehlt:
35
; 1.MISO abfragen ob Bit A gesetzt wurde, wenn ja dann Slave Puffer voll
36
; 2.CS bzw. SS für einen Takt auf Null setzen

Habe meinen VDIP1 gerade in den Himmel gejagt. Muss also erstmal 
theoretisch den Spass durchspielen. Um Daten an den VNC1L zu senden 
müsste die obere Routine ja erstmal richtig sein? Was mit noch fehlt 
steht ja unten im Code. Wie bekomme ich eine Abfrage hin, ob ein Bit im 
Schieberegister vorhanden ist oder nicht?

Meine Idee:
Nachdem SPI_SENDEN_STATUS_w2 abgearbeitet ist, 1 Takt die CS Leitung 
noch 1 lassen, dann 0 setzen(Wie schaff ich nur ein Takt?). Im SPDR muss 
ja nun der Inhalt vom Slave stehen(welche Position?) und das Bit muss 
maskiert werden, dann Abfrage ob gesendete Daten vom Master angenommen 
oder nicht.

Damit wäre das Senden erstmal beendet. Nun kommt ja ein Antwort Byte 
noch.. aber dazu später.

Sind meine Ideen erstmal richtig?

mfg

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.