Ich versuche einen Atmega8, der in einem STK500 steckt, mit meinem S35
reden zu lassen, was leider nicht so richtig funktioniert.
Benutzt wird ein billiges ebay Datenkabel (P5=GND, P2=TxD, P3=RxD),
welches dann auch genau so an das STK500 verbunden wurde, also direkt an
PD0 bzw PD1 und GND.
Spreche ich das Telefon via Hterm und aktiviertem DTR an funktioniert
dies auch, nur über den Mikrocontroller kommt nichts an, was anscheinend
an DTR liegt, da ich nicht verstehe, wie ich das im Programm
"aktivieren" kann.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#Hardware_Handshake
Hier habe ich gelesen, dass ich den Handshake mittels 0x11 herstellen
kann, aber entweder habe ich das ganze nicht verstanden, es falsch
eingesetzt oder (am ehesten) beides zusammen.
Ich benutzte die UART Bibliothek von Peter Fleury.
Um genau zu sein, wird zwar was auf dem LCD ausgegeben (Kommunikation
scheint zu gehen), aber das Handy reagiert nicht auf die AT Befehle.
ZB ausschalten (AT^SMSO), was via Hterm funktioniert).
Eventuell kann mir ja jemand auf die Sprünge helfen.
Danke!
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <inttypes.h>
|
4 | #include <avr/io.h>
|
5 | #include <avr/interrupt.h>
|
6 | #include <avr/pgmspace.h>
|
7 | #include <util/delay.h>
|
8 | #include "lcd-routines.h"
|
9 | #include "includes.h"
|
10 | #include "uart.h"
|
11 | #define UART_BAUD_RATE 19200
|
12 |
|
13 | int main () {
|
14 |
|
15 | unsigned int c;
|
16 | char buffer[7];
|
17 | DDRD &= ~(1<<PD3);
|
18 | PORTD &= ~(1<<PD3);
|
19 |
|
20 | lcd_init();
|
21 | uart_init(UART_BAUD_SELECT(19200,4000000L));
|
22 | sei();
|
23 |
|
24 | while (1) {
|
25 | c = uart_getc();
|
26 |
|
27 | if ( c & UART_NO_DATA ) {
|
28 | /*
|
29 | * no data available from UART
|
30 | */
|
31 | }
|
32 |
|
33 | else {
|
34 | itoa( c, buffer, 10);
|
35 | lcd_string(buffer);
|
36 | }
|
37 |
|
38 | if (debounce( PIND, PD3 )) {
|
39 | uart_putc(0x11);
|
40 | uart_puts("AT^SMSO");
|
41 | uart_putc(13);
|
42 | uart_putc(10);
|
43 | }
|
44 | }
|
45 | }
|