Tx Rx Pins AT90CAN128

Gast #2595958
Hallo,

nach einigen erfolglosen versuchen daten mit der canlib von 
kreatives-chaos zu empfangen habe ich bei der fehlersuche mal die Tx und 
Rx Pins direkt am controller gemessen (nicht can_h und can_l am 
mcp2551). ist es normal das dort der tx pin immer high und rx immer low 
ist? leider nur mit dem multimeter gemessen.
Gast
CAN schrieb:
> ist es normal das dort der tx pin immer high und rx immer low
>
> ist? leider nur mit dem multimeter gemessen.

Also mit einem Multimeter gemessen, sollte der rx-Pin ebenfalls "logisch 
1" sein.

Das wäre nicht in Ordnung.

Aber mit dem Mulitimeter wirst Du die CAN-Botschaften nie wirklich 
wahrnehmen können.

Wie debuggst Du? mit Print ausgaben auf COM?
Gast
das ich mit einem multimeter keine can nachrichten "sehen" kann ist mir 
schon klar. ich hatte auch ursprünglich mit dem open bench logic sniffer 
messen wollen. allerdings zeigt auch dieser einen dauerhaften high pegel 
auf tx und low auf rx. ganz gleich ob ich sende oder nicht. leider habe 
ich wenig vertrauen in diesen billig analyser, weswegen ich noch mal mit 
dem multimeter am pin war.

die debug ausgaben habe ich tatsächlich über den usart ausgeben wollen.

ich hätte eigentlich erwartet das beide pinne am controller low sind 
wenn nichts auf dem bus passiert und nur für die dauer des senden bzw 
empfangens high impulse führen.

aber wenn wirklich beide pinne high pegel haben sollten steckt der 
fehler wohl nicht in der software.
Gast
habe grade noch mal geschaut ob irgendwo eine brücke oder ähnliches 
übersehen wurde. es ist aber alles in ordnung. wenn ich dem controller 
sage er soll den port d auf eingang setzen und ihn ansonsten nackig 
lasse sind auch beide pins (rx, tx) wie erwartet low.

die hardware scheint also zu funktionieren.

sobald ich den can bus mit der can lib initialisiere habe ich wieder das 
oben bereits beschriebene bild.

hier mal der testcode:
1
#ifndef F_CPU
2

3
#define F_CPU 16000000    // do NOT append UL to this number
4

5
#endif
6
#include <stdint.h>
7
#include <stdlib.h>
8
#include <avr/io.h>
9
#include <avr/interrupt.h>
10
#include <avr/pgmspace.h>
11
#include "uart.h"
12
#include "can.h"
13
#include "config.h"
14
#include <util/delay.h> 
15

16
#define UART_BAUD_RATE 500000
17

18
 
19
int main(void)
20
{  
21
  unsigned int c;
22
  uart1_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU));
23
  can_init(BITRATE_125_KBPS);
24
  can_filter_t filter = {
25
    .id = 0,
26
    .mask = 0,
27
    .flags = {
28
      .rtr = 0,
29
      .extended = 0
30
    }
31
  };
32
  can_set_filter(0, &filter);
33
  int i;  
34
  sei();
35
  
36
    while(1)
37
    {
38
    c = uart1_getc();
39
        if ( c & UART_NO_DATA ) {
40
            /* 
41
             * no data available from UART 
42
             */
43
        } else {
44
      uart1_puts("Gateway vorhanden");
45
      //dummy nachricht
46
      can_t msg;
47
      msg.id = 1;
48
      msg.flags.rtr = 0;
49
      msg.flags.extended = 0;
50
      msg.length = 4;
51
      msg.data[0] = 0x01;
52
      msg.data[1] = 0x02;
53
      msg.data[2] = 0x03;
54
      msg.data[3] = 0x04;
55
      can_send_message(&msg);
56
     }
57
    if(can_check_message()) {
58
      can_t msg;
59
      can_get_message(&msg);
60
      uart1_puts("ID: ");
61
      uart1_putc(msg.id);
62
      uart1_puts("Length: ");
63
      uart1_putc(msg.length);
64
      uart1_puts("Data: ");
65
      for(i = 0; i <= msg.length; i++) {
66
        uart1_putc(msg.data[i]);
67
      }
68
    }
69
    }
70
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.