Forum: Mikrocontroller und Digitale Elektronik UART Mac wie?


von Flo (Gast)


Lesenswert?

Mit welchem Programm kann ich den im Tutorial beschriebenen UART 
abfragen? (Mac 10.5) ZTerm erkennt nicht, dass das Exboard nativen USB 
Support hat und zeigt gar nichts an... wie soll ich vorgehen? Muss ich 
noch irgendwas einstellen? Mein Quarz hat 12Mhz.

Danke

Guten Rutsch

Flo

von pst (Gast)


Lesenswert?

Was fuer ein Board? Was fuer ein USB-Chip? Hast du ueberhaupt einen 
Treiber dafuer?

von Peter D. (peda)


Lesenswert?

Was fürn Tutorial, was fürn Exboard???

Beschreib mal Dein Problem, ohne daß man Deine Gedanken lesen können 
muß.


Peter

von Flo (Gast)


Lesenswert?

Dieses Board:

http://www.ulrichradig.de/
->avr
->Experimentierboard

Treiber???

Hoffe ihr könnt was damit anfangen

Flo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da ist ein in Software auf einem Atiny2313 implementiertes USB-CDC 
drauf. Der Mac sollte das unterstützen, allerdings bedarf es noch eines 
Terminalprogrammes.

Hier wird beschrieben, wie man das mit Bordmitteln hinbekommen kann:
http://www.macosxhints.com/article.php?story=20061109133825654

(selbst nicht getestet, man wird gegebenenfalls den Devicenamen anpassen 
müssen, wie man den herausfindet, steht da aber auch)

von Flo (Gast)


Lesenswert?

Auch wenn da steht, wie man den rausfindet... (seh ich nicht) was muss 
ich den eingeben, speziell für dieses Problem?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> You may also need to customize the screen command with a
> different device name if you are using something other
> than the Keyspan Serial Adapter
> (do an ls tty* of the dev directory to get the right name).

Im Terminal musst Du also
1
ls /dev/tty*

eingeben, dann siehst Du alle Devices, deren Name mit tty anfängt.

Mit Terminal ist die MacOS-Applikation gemeint, die der 
Windows-"Eingabeaufforderung" entspricht, nicht das die serielle 
Schnittstelle bedienende Terminalprogramm.

von Flo (Gast)


Lesenswert?

uiuiui
wenn ich das mal nicht gewusst hab...
echt :(
das man das so macht ist klar. Nur kommt da nichts, was mit USB zu tun 
hat...

Flo

von mitleser ( gast) (Gast)


Lesenswert?

Hallo flo,

nach dem Lesen der Webseite http://www.ulrichradig.de und dem Link 
http://www.obdev.at/products/avrusb/projects-de.html
brauchst du nur das Board mit Strom zu versorgen.
Treiber sind nicht nötig.
Im Terminal kannst du mit folgendem Befehl tail -f /var/log/system.log 
den Anschlussversuch beobachten, auch eventuelle Fehler werden dort 
gelistet. Auch findest du dort die Bezeichnung der Schnittstelle.

Bitte den Mac mit der Platine verbinden.
weiteres Vorgehen nach Rufus t. Firefly erstem Artikel.

Mitleser

von Flo (Gast)


Lesenswert?

Es hat so weit funktioniert:

IOUSBFamily is having trouble enumerating a USB device that has been 
plugged in.  It will keep retrying.  (Port 1 of hub @ location: 
0x1d000000)
Jan  1 15:24:34 Macintosh kernel[0]: USBF:  14738.285  [0x2b74d00] The 
IOUSBFamily was not able to enumerate a device.

Habt ihr noch ne Idee, woran es liegen könnte? Was für Fuses muss ich 
nehmen?

Danke schonmal

Flo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Tiny2313 ist korrekt programmiert?

von Flo (Gast)


Lesenswert?

ich glaub ich habs jetzt:

Jan  1 16:02:04 Macintosh kernel[0]: AppleUSBCDCACMData: start: 
InterfaceMappings dictionary not found for this device. Assume CDC 
Device...
Jan  1 16:02:04 Macintosh kernel[0]: AppleUSBCDC::createSerialStream NON 
WAN CDC Device
Jan  1 16:02:04 Macintosh kernel[0]: AppleUSBCDC::createSerialStream 
using default naming and suffix...
Jan  1 16:02:04 Macintosh kernel[0]: AppleUSBCDCACMData: Version number 
- 3.2.12, Input buffers 8, Output buffers 16

was muss ich jetzt für tty angeben?

Danke

Flo

von Flo (Gast)


Lesenswert?

Wenn man das Gerät an nen Windows PC (XP) anschließt kommt:
Neue Hardware gefunden
USB-R232 Device

Nur das mit den Treibern klappt noch nicht so. Also ich denke, dass der 
richtig Programmiert ist... Hoffe, dass es auch bald am Mac läuft.

Danke

Flo

von Flo (Gast)


Lesenswert?

Es geht mit ZTerm.
Jetzt werd ich mal das Tutorial weiter machen.

Danke für die viele Hilfe

Flo

von mitleser (Gast)


Lesenswert?

hallo flo,

schau mal hier: 
http://wiki.openmoko.org/wiki/MacOS_X#Connecting_a_Mac_and_an_Openmoko_device

dann unter /dev nachschauen ob cu.xxxx oder tty.xxxx vorhanden ist.

lass dich nicht entmutigen, der Mac ist eine sehr gute 
Entwicklungsplattform.

Mitleser

von Flo (Gast)


Lesenswert?

So läufts:

tell application "Terminal"
  do script with command "screen /dev/cu.usbmodem1d11 9600"
  set number of rows of window 1 to 100
  set number of columns of window 1 to 80
  set background color of window 1 to "black"
  set normal text color of window 1 to "green"
  set custom title of window 1 to "SerialOut"
end tell

wie kann ich jetzt was senden? so wie im Tut beschrieben?

Danke

Flo

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

schice per copy was du willst an das neu gerät oder per console

von Flo (Gast)


Lesenswert?

???
???
???
so klappts nicht
???
???
???

Flo

von Flo (Gast)


Lesenswert?

Ich hab jetzt dieses Programm geflasht:
1
#include <avr/io.h> 
2
3
#define USART_BAUDRATE 9600 
4
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) 
5
6
int main (void) 
7
{ 
8
   char ReceivedByte; 
9
10
   UCSRB |= (1 << RXEN) | (1 << TXEN);   // Turn on the transmission and reception circuitry 
11
   UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes 
12
13
   UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register 
14
   UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register 
15
16
   for (;;) // Loop forever 
17
   { 
18
      while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR 
19
      ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived" 
20
21
      while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it 
22
      UDR = ReceivedByte; // Echo back the received byte back to the computer 
23
   }    
24
}

mit screen kann ich jetzt darauf zugreifen aber wie kann ich zum 
Beispiel eine eins senden? weil man kann in dem Fenster nichts eingeben?

Flo

von Flo (Gast)


Lesenswert?

keiner ne idee?

Flo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

>  weil man kann in dem Fenster nichts eingeben?

Nicht? Focus auf Fenster setzen, auf der Tastatur die Taste 1 drücken 
... das gibt natürlich nur dann ein sichtbares Echo, wenn Dein Programm 
im µC korrekt funktioniert.

Sind denn die "Fuses" korrekt gesetzt, so daß die Takterzeugung auch 
wirklich das macht, was Du mit F_CPU sicherlich auch irgendwo angibst?

von Flo (Gast)


Lesenswert?

ES GEHT!!! Danke
1
.include "m8def.inc"
2
 
3
.def temp = R16
4
 
5
.equ F_CPU = 12000000                            ; Systemtakt in Hz
6
.equ BAUD  = 9600                               ; Baudrate
7
 
8
; Berechnungen
9
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
10
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
11
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
12
 
13
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
14
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
15
.endif
16
 
17
.org 0x00
18
        rjmp main
19
 
20
.org URXCaddr
21
        rjmp int_rxc
22
 
23
; Hauptprogramm
24
main:
25
    
26
    ; Stackpointer initialisieren
27
 
28
    ldi     temp, LOW(RAMEND)
29
    out     SPL, temp
30
    ldi     temp, HIGH(RAMEND)
31
    out     SPH, temp
32
 
33
    ; Port B = Ausgang
34
 
35
    ldi     temp, 0xFF
36
    out     DDRB, temp
37
 
38
    ; Baudrate einstellen
39
 
40
    ldi     temp, HIGH(UBRR_VAL)
41
    out     UBRRH, temp
42
    ldi     temp, LOW(UBRR_VAL)
43
    out     UBRRL, temp
44
 
45
    ; Frame-Format: 8 Bit
46
 
47
    ldi     temp, (1<<URSEL)|(3<<UCSZ0)
48
    out     UCSRC, temp
49
 
50
    sbi     UCSRB, RXCIE                ; Interrupt bei Empfang
51
    sbi     UCSRB, RXEN                 ; RX (Empfang) aktivieren
52
    
53
    sei                                 ; Interrupts global aktivieren
54
    
55
loop:
56
    rjmp loop                           ; Endlosschleife
57
 
58
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART empfangen wurde
59
 
60
int_rxc:
61
    push    temp                        ; temp auf dem Stack sichern
62
    in      temp, sreg                  ; SREG sichern
63
    push    temp
64
    
65
    in      temp, UDR                   ; UART Daten lesen
66
    cpi     temp, '1'                   ; empfangenes Byte mit '1' vergleichen
67
    brne    int_rxc_1                   ; wenn nicht gleich, dann zu int_rxc_1
68
    cbi     PORTB, 0                    ; LED einschalten, low aktiv
69
    rjmp    int_rxc_2                   ; Zu int_rxc_2 springen
70
int_rxc_1:
71
    cpi     temp, '0'                   ; empfangenes Byte mit '0' vergleichen
72
    brne    int_rxc_2                   ; wenn nicht gleich, dann zu int_rxc_2
73
    sbi     PORTB, 0                    ; LED ausschalten, low aktiv
74
int_rxc_2:
75
 
76
    pop     temp
77
    out     sreg, temp                  ; SREG wiederherstellen
78
    pop     temp                        ; temp wiederherstellen
79
    reti

Ich kann null und eins eingeben und die lampe geht an und aus.

Danke

Flo

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.